Hallo,
huch, die Vorlesung hat ein bißchen länger gedauert
Hier mal ein bißchen Code:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
o: TWinControl;
pt: TPoint;
begin
if (Sender is TGraphicControl) then
begin
pt.x := TGraphicControl(Sender).Left + (TGraphicControl(Sender).Width div 2);
pt.y := TGraphicControl(Sender).Top + (TGraphicControl(Sender).Height div 2);
o := TGraphicControl(Sender).Parent;
while Assigned(o) and (o <> Self) do
begin
pt := o.ClientToScreen(pt);
o := o.Parent;
end;
PopupMenu1.Popup(pt.x, pt.y);
end;
end;
der Code übersetzt für jedes Parent Control die Coordinaten, außer für das Form selber. Das funktioniert so leider nicht mit den TButton, weil die nicht von TGraphicControl sondern TButtonControl abgelitten sind und es keine Superklasse gibt die das ClientToScreen kann. Also einfach ein Copy-n-Paste und das Graphic durch Button, dann klappt das eigentlich auch für die anderen Typen. Die Methode muß z.Zt. noch im TForm Objekt welches die ganzen Controls enthält ausgeführt werden, damit der Test "(o <> Self)" funzt, wenn man das noch bißchen anders schreibt z.B. mit Assigned(o.Parent) und boolische Ausdrücke nicht vollständig ausgewertet werden könnte man das auch in ne extra
Unit packen.