在DBGrid欄位加入按鈕後, 如何修改按鈕的caption? |
答題得分者是:Rain
|
361002
一般會員 發表:7 回覆:18 積分:5 註冊:2003-04-10 發送簡訊給我 |
|
361002
一般會員 發表:7 回覆:18 積分:5 註冊:2003-04-10 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
第二個問題比較簡單,設置DBGrid的Options屬性的dsAlwaysShowEditor項為True就行,第一個問題感覺有點麻煩,不知道有沒有什麼簡單的方法,提供一個思路給你,僅供參考: 我找了一下Delphi的代碼,首先不妨來看看它原來的標題是怎麼畫出來的吧: 在Grids單元找到TInplaceEditList的procedure PaintWindow(DC: HDC); override;過程,想要的東西都在裏邊了,可以發現按鈕上的三個點(很小的矩形區域)是調用API函數PatBlt實現的,我把這段代碼獨立出來,可方便看一下它的實現: procedure TForm1.Button1Click(Sender: TObject); var X, Y, W: Integer; DC: HDC; R: TRect; begin DC := GetDC((Sender as TButton).Handle); R := (Sender as TButton).ClientRect; X := R.Left ((R.Right - R.Left) shr 1) - 1 1; Y := R.Top ((R.Bottom - R.Top) shr 1) - 1 1; W := GetSystemMetrics(SM_CXVSCROLL) shr 3; if W = 0 then W := 1; PatBlt(DC, X, Y, W, W, BLACKNESS);//繪製指定區域,X,Y為左上角座標,W,W對應的參數為寬度和高度 PatBlt(DC, X - (W * 2), Y, W, W, BLACKNESS); PatBlt(DC, X (W * 2), Y, W, W, BLACKNESS); ReleaseDC((Sender as TButton).Handle, DC); end; 就是說解決問題只要把三行PatBlt的代碼遮罩掉,自己再Textout出標題即可。當然說是這麼說,實現起來還是比較麻煩的,可能需要自己再定義一個繼承自DBGrid的類,下面是大致需要做的事情: 自己聲明一個 TInplaceEditListEx = class(TInplaceEditList); 然後重載procedure PaintWindow(DC: HDC);過程畫出標題,大致如下: var ACanvas: TCanvas; //其他參數不變 begin ACanvas := TCanvas.Create; ACanvas.Handle := DC; ACanvas.Textout(); … end; 聲明一個繼承自TInplaceEditListEx的類以替代原來的TDBGridInplaceEdit; TDBGridInplaceEditEx = class(TInplaceEditListEx); DBGrids單元中的TDBGridInplaceEdit實現的東西還是要的,照搬過來就好。 最後聲明一個TDBGridEx = class(TDBGrid); 重載它的CreateEditor函數: function CreateEditor: TInplaceEdit; begin Result := TDBGridInplaceEditEx.Create(Self); end; 大致如此,哈哈,感覺有點亂,但願不至於誤導你,上面的過程如有什麼不當還請指正。 |
361002
一般會員 發表:7 回覆:18 積分:5 註冊:2003-04-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |