Getting the cell clicked on in a TGridPanel
I have a TGridPanel on a form and wish to add a control to a specific "cell" that is clicked on.
I can get the point easily enough:
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;
I probably don't need the if ControlAtPos(P) = nil then line, but I want to make sure I'm not inserting a control in a cell that already has one in it.
So... what code do I use to get InsCol and InsRow? I've been up and down the TGridPanel and TControlCollection class code and can't find anything that will give me a column or row value from mouse coordinates. Nor does their seem to be a relevant event to use other than OnDblClick().
Any help would be greatly appreciated.
EDIT: Changed variable Result to MyControl to avoid confusion.
procedure TForm1.GridPanel1Click(Sender: TObject); var P: TPoint; R: TRect; InsCol, InsRow : Integer; begin P := (Sender as TGridPanel).ScreenToClient(Mouse.CursorPos); for InsCol := 0 to GridPanel1.ColumnCollection.Count - 1 do begin for InsRow := 0 to GridPanel1.RowCollection.Count - 1 do begin R:= GridPanel1.CellRect[InsCol,InsRow]; if PointInRect(P,R) then begin ShowMessage (Format('InsCol = %s and InsRow = %s.',[IntToStr(InsCol), IntToStr(InsRow)])) end; end; end; end; function TForm1.PointInRect(aPoint: TPoint; aRect: TRect): boolean; begin begin Result:=(aPoint.X >= aRect.Left ) and (aPoint.X < aRect.Right ) and (aPoint.Y >= aRect.Top ) and (aPoint.Y < aRect.Bottom); end; end;