Moin, Moin.
Vielleicht mal einen alternativer Lösungsansatz ...
Delphi-Quellcode:
procedure TfoTest9.StringGrid1MouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
var iCol,iRow,
dx,dy : Integer;
begin
if Button=mbRight then
with StringGrid1 do begin
MouseToCell(X,Y,iCol,iRow);
if iCol>=FixedCols then
if iRow>=FixedRows then begin
Col:=iCol;
Row:=iRow;
dx :=foTest9.Left+StringGrid1.Left-10; // -10 << adjusts Popup relative to cursor
dy :=foTest9.Top +StringGrid1.Top +20; // +20 << adjusts Popup relative to cursor
PopUpMenu1.Popup(X+dx,Y+dy);
end;
end;
end;
Achtung: Die Eigenschaft "AutoPopup" des PopUpMenüs muss FALSE sein! Durch die Addition/Subtraktion der beiden Zahlenwerte bei der Ermittlung von dx und dy kann die Position des Popup-Menüs noch optimiert werden. Durch die Verwendung von FixedCols/FixedRows wird das Öffnen des PopUp für alle nicht verschiebbaren (grau hinterlegten) Zellen verhindert.
Gruß Ralph