線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1617
推到 Plurk!
推到 Facebook!

在DBGrid欄位加入按鈕後, 如何修改按鈕的caption?

答題得分者是:Rain
361002
一般會員


發表:7
回覆:18
積分:5
註冊:2003-04-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-21 09:03:05 IP:203.69.xxx.xxx 未訂閱
請問, 在DBGrid欄位加入按鈕後, 如何修改按鈕的caption? 麻煩大家幫忙, 謝謝!
361002
一般會員


發表:7
回覆:18
積分:5
註冊:2003-04-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-21 10:16:01 IP:203.69.xxx.xxx 未訂閱
對不起, 又是我, 再問一個問題, 就是, 能不能讓button一開始就顯示在欄位上面, 而不需要用mouse點選欄位, button才會出現, combobox下拉式選單也一樣; 現在好像click第一次時是setfocus作用, click第二次才會出現button或combobox, 有沒有解決的方法呢?
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-21 11:22:06 IP:218.85.xxx.xxx 未訂閱
第二個問題比較簡單,設置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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-21 11:48:57 IP:203.69.xxx.xxx 未訂閱
這....這個解答對我而言, 真的太難了... 不過還是很感謝
系統時間:2024-06-19 2:58:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!