如何修改Dbgrid元件的Title可被按下,其視覺效果就像Button被按下一般? |
答題得分者是:wameng
|
ucdesign2
一般會員 發表:24 回覆:33 積分:11 註冊:2002-10-23 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
Dbgrid 點Title 要有沈下去的感覺難。
主要是 DBGrids 的 DrawTitleCell 部分,無法插入程式碼。不會觸發 onDrawColumnCell or onDrawDataCell 事件。 除非要 Override DrawCell 我的方法是重寫整個DBGrids Saveas 為自己的元件。並在關鍵地方插入程式碼。 可能還有一個作法直接繼承TDBGrid。我不確定。沒試過。 在 TitleClick 時,計算該方格區域,並 invalidateRect 及記憶區塊位置及大小。 Override Paint 事件 在 inherited 之後,畫上 該區塊下沈畫面。 用 DrawEdge API 畫出被按下的狀態。 參考 |
ucdesign2
一般會員 發表:24 回覆:33 積分:11 註冊:2002-10-23 發送簡訊給我 |
===================引 用 wameng 文 章=================== Dbgrid 點Title 要有沈下去的感覺難。 主要是 DBGrids 的 DrawTitleCell 部分,無法插入程式碼。不會觸發 onDrawColumnCell or onDrawDataCell 事件。 除非要 Override DrawCell 我的方法是重寫整個DBGrids Saveas 為自己的元件。並在關鍵地方插入程式碼。 可能還有一個作法直接繼承TDBGrid。我不確定。沒試過。 在 TitleClick 時,計算該方格區域,並 invalidateRect 及記憶區塊位置及大小。 Override Paint? 事件 在 inherited 之後,畫上 該區塊下沈畫面。 用 DrawEdge API 畫出被按下的狀態。 參考 =================================================== 謝謝wameng版主回答! 版主的回答已經給了很多的解決方向! 但因為我的程度不夠!想了許久還是無法完成點擊Title 要有沈下去,鬆開mouse則回原來樣子的效果! 如果我直接繼承TDbgrid元件,重新寫一新原件該怎麼做?或那裡有更具體的參考資料? 請各位前輩不吝指教!謝謝 |
ucdesign2
一般會員 發表:24 回覆:33 積分:11 註冊:2002-10-23 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
花了二十分鐘寫好了。自己動作做,其樂無窮。
<textarea cols="60" rows="10" class="delphi" name="code"> type TDBGrid = Class(DBGrids.TDBGrid) Private TitleDown :Integer; Protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override; procedure Paint;override; Public end; TForm1 = class(TForm) ..... .... procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); var GridCoord :TGridCoord; begin TitleDown := -1; inherited MouseDown(Button, Shift, X, Y); if Button = mbLeft then begin GridCoord := MouseCoord(X,Y); if (GridCoord.Y=0) and (GridCoord.X>0) then begin TitleDown := GridCoord.X; InvalidateCell(GridCoord.X,0); end; end; end; procedure TDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y); if TitleDown > 0 then begin InvalidateCell(TitleDown,0); TitleDown := -1; end; end; procedure TDBGrid.Paint; var ARect :TRect; begin inherited; if TitleDown>0 then begin ARect := CellRect(TitleDown,0); DrawEdge(Canvas.Handle, ARect, BDR_SUNKENOUTER ,BF_RECT); end; end; </textarea> |
ucdesign2
一般會員 發表:24 回覆:33 積分:11 註冊:2002-10-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |