如何讓DBGrid按滑鼠右鍵的時候不會影響RowSelect ?? |
答題得分者是:Justmade
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
參考下面程式碼, 或許對您有幫助
抑制滑鼠右鍵行為
TMyDBGrid=class(TDBGrid) procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; end; ... procedure TMyDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbRight then abort; inherited; end; procedure TForm1.Button1Click(Sender: TObject); var MyDBGrid:TMyDBGrid; Options:TDBGridOptions; begin MyDBGrid:=TMyDBGrid.Create(Self); MyDBGrid.SetBounds(50,50,350,200); MyDBGrid.parent:=Self; MyDBGrid.DataSource:=DataSource1; Options:=MyDBGrid.Options; Include(Options,dgMultiSelect); MyDBGrid.Options:=Options; end; |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
我在 Delphi 7 試沒問題不會選取不見但後來知道你用 Delphi 5, 再試一試果然會令選取不見。 你可加入紅色部份 :
TDBGrid= class(DBGrids.TDBGrid) protected Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; end; TForm1 = class(TForm) .... implementation {$R *.dfm} procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbRight then inherited; end; procedure TForm1.XXXXX .... |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
不用另外繼承,你試試將以下程式碼替代
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33719
範例的程式碼
unit CDSMDForm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, shellapi, StdCtrls, Grids, DBGrids, DB, DBTables, DBCtrls, DBClient, Provider, jpeg, ExtCtrls; type TDBGrid= class(DBGrids.TDBGrid) protected Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; end; TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; DataSource2: TDataSource; DataSetProvider1: TDataSetProvider; DataSetProvider2: TDataSetProvider; Query1: TQuery; Query2: TQuery; ClientDataSet1: TClientDataSet; ClientDataSet2: TClientDataSet; DBGrid2: TDBGrid; procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const // 這個整數值將按照布林值返回,並送入陣列 CtrlState : array[Boolean] of Integer=(DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED); begin //確保只有在邏輯欄位才能插入元件 if Column.Field.DataType = ftBoolean then begin DBGrid1.Canvas.FillRect(Rect); DrawFrameControl(DBGrid1.Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]); end; end; { TDBGrid } procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbRight then inherited; end; end.並將 DBGrid1 的 poMultiSelect 設 True 便可見右按不會影響 selection 了 另你可換一個有 Boolean Field 的 Table 也可看到不會出現格線不見的情形。 其實看你的多個問題覺得你好像不是用標準的 DBGrid,若時的話你應說清楚免得大家在浪費時間。另你若間題還不能解決你最好做一個簡單的程式包含你的數個間題然後上傳,這樣會比較清楚。 發表人 - Justmade 於 2003/07/09 19:21:27 |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |