2011-12-06 27 views
1

我有一個TDBGrid的後代,允許選擇多行。檢測TDbGrid的裝訂線(左邊距)中的點擊?

我想打開,當他們在陰溝裏點擊這個模式,和關閉,當他們在網格中的任何單元格單擊。

有沒有在onmousedown事件的事件處理程序我可以檢測他們點擊的方法嗎?

+2

'OnMouseDown'很困難;你可以得到座標,但是你必須跟蹤這些座標下的列,看看它是否正確。但是,'TDBGrid.OnCellClick'應該可以工作。你也可以看看'OnColEner'。 –

+0

在此處測試:OnCellClick(顧名思義)僅在單元格單擊時觸發,所以這是我需要的1/2。它可以關閉多選。 但是,我仍然需要一種方法來檢測他們是否點擊排水溝,所以我可以打開它。我只需要知道他們是否正在點擊列0左邊的左側。 – Tom

+0

OnCellClick不起作用;它不會在排水溝上開火。 OnMouseDown可以工作,但它似乎只在標題行(包括陰溝)上觸發,並且您必須執行一些工作來檢索單擊的實際單元格。我想你最好使用標準按鍵進行多選 - 「Ctrl + Click」和「Shift + Click」 - 就像Windows中的其他應用程序一樣。 :) –

回答

2

OnMouseDown是困難的;你可以通過XY參數到事件的座標,並通過類型轉換的TDBGrid將其轉換爲行和列的始祖TCustomGrid

var 
    Coord: TGridCoord; 
begin 
    Coord := TCustomGrid(DBGrid1).MouseCoord(X, Y); 
    if Coord.X = 0 then 
    // We're in the "gutter" 
end; 

然而,似乎OnMouseDown只火的TDBGrid當標題行被點擊。

OnCellClick似乎是一個可能的選擇,但它只能在實際的細胞(不包括排水溝和標題行)火災,所以它不會起作用。 OnColEnter也不會,因爲它不會在你想要的時候觸發。

它看起來像你的最好的辦法是使用標準按Ctrl改性劑與鼠標左鍵做你的多重選擇,如同在Windows中所有其他應用程序,並多選。