我在表單上有一個TGridPanel
,並希望將控件添加到單擊的特定「單元格」。在TGridPanel中點擊單元格
我能得到一點很容易不夠:
procedure TForm1.GridPanel1DblClick(Sender: TObject);
var
P : TPoint;
InsCol, InsRow : Integer;
begin
P := (Sender as TGridPanel).ScreenToClient(Mouse.CursorPos);
if (Sender as TGridPanel).ControlAtPos(P) = nil then
begin
InsCol := ???;
InsRow := ???;
(Sender as TGridPanel).ControlCollection.AddControl(MyControl, InsCol, InsRow)
end;
end;
我可能不需要if ControlAtPos(P) = nil then
線,但我要確保我不會插入一個已經具有一個小區內的控制它。
那麼......我用什麼代碼來獲取InsCol和InsRow?我已經上下了TGridPanel
和TControlCollection
類代碼,並且找不到任何能夠從鼠標座標中獲得列或行值的內容。它們似乎也不是使用OnDblClick()
以外的相關事件。
任何幫助將不勝感激。
編輯:將變量結果更改爲MyControl以避免混淆。
我希望能有一個更有效的方式,但是這似乎是一種可靠的方法。順便說一句,Windows有一個名爲'PtInRect()'的API,它可以完成你的'PointInRect()'函數的功能,但是參數的順序是相反的。 –
更正:您的PointInRect()和Windows的PtInRect()之間的區別在於Windows版本排除了右側和底部邊緣。 –
我知道存在像PointInRect這樣的東西。因爲我曾經見過它,但我找不到它。謝謝傑裏讓我想起這個功能 – Ravaut123