2014-03-28 63 views
1

我在檢測發生了哪個鼠標事件時遇到了問題。我想在用戶單擊鼠標時顯示說明,並在用戶雙擊時執行其他操作。Delphi XE3:如何檢測網格上的CellClick和DblClick

我試過使用TTimer,但那不起作用。雙擊顯示消息並執行「DoSomething」程序。

我使用TDBGrid和OnCellClick和OnDblClick。

示例代碼:

procedure timerTimer(Sender: TObject); 
begin 
    timer.Enabled := false; 
    fFlagaDblClick := false; 
    ShowMessage('sample message'); 
end; 

procedure gridListCellClick(Column: TColumn); 
begin 
    timer.Enabled := true; 
    fFlagaDblClick := False; 
end; 

procedure gridListDblClick(Sender: TObject); 
begin 
    timer.Enabled := false; 
    fFlagaDblClick := True; 
    DoSomething; 
end; 
+0

你在說什麼網格? TStringGrid有OnClick和OnDblClick事件 – MBo

+0

歡迎來到Stackoverflow。關於包含代碼的榮譽,請注意,在你的問題中,「請」,「謝謝」,「TIA」等被認爲是不好的形式。此外它總是最好具體....列出你使用的網格的確切味道。 – Johan

+0

這是關於TDBGrid的。 – Anna

回答

2

德爾福網格有OnClickOnDblClick事件處理程序。

enter image description here

唯一的問題是,這些事件處理程序沒有在當前選擇的小區作爲參數傳遞。
但是,使用一點點的代碼很容易就可以解決問題。

procedure TForm24.GridDisassemblyDblClick(Sender: TObject); 
begin 
    ShowMessage('Current row is '+IntToStr(GridDisassembly.Row) 
       +'; current column is: '+IntToStr(GridDisassembly.Col)); 
end; 

爲了使當前選中的列比0 xGrid.Options其他任何不能啓用goRowSelect

+0

我使用TDBGrid和OnCellClick和OnDblClick。 – Anna

+0

@anna,你需要把這個信息放在問題中:-)而不是在評論中。沒有**詳細信息**問題無法正確回答。 – Johan

+0

我是新來的。謝謝你的建議 :) – Anna

0

我有解決方案: 在過程gridListDblClick我禁用事件OnCellClik並啓用gridListEnter。 它正在工作。

procedure timerTimer(Sender: TObject); 
begin 
    timer.Enabled := false; 
    fFlagaDblClick := false; 
    ShowMessage('sample message'); 
end; 

procedure gridListCellClick(Column: TColumn); 
begin 
    timer.Enabled := true; 
    fFlagaDblClick := False; 
end; 

procedure gridListDblClick(Sender: TObject); 
begin 
    gridList.OnCellClick := nil; 
    timer.Enabled := false; 
    fFlagaDblClick := True; 
    DoSomething; 
end; 

procedure gridListEnter(Sender: TObject); 
begin 
    inherited; 
    gridList.OnCellClick := gridListCellClick; 
end;