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

如何讓DBGrid按滑鼠右鍵的時候不會影響RowSelect ??

答題得分者是:Justmade
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-08 12:29:51 IP:61.221.xxx.xxx 未訂閱
小弟想在DBGrid做多筆選取的時候,不小心按到右鍵會讓多筆選取不見,有方式可以做到嗎?? 發表人 - ivankuo 於 2003/07/08 13:27:05
------
ivankuo
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-09 17:34:01 IP:210.61.xxx.xxx 未訂閱
參考下面程式碼, 或許對您有幫助 抑制滑鼠右鍵行為
  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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-09 18:14:41 IP:218.16.xxx.xxx 未訂閱
我在 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-09 18:48:15 IP:61.221.xxx.xxx 未訂閱
Justmade前輩~~我試了還是不行耶~~~ DBGrid要另外繼承嗎??
------
ivankuo
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-09 18:57:39 IP:218.16.xxx.xxx 未訂閱
不用另外繼承,你試試將以下程式碼替代 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-09 19:14:48 IP:61.221.xxx.xxx 未訂閱
ok啦~~~感謝前輩大力幫忙.
------
ivankuo
系統時間:2024-05-18 17:04:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!