Einzelnen Beitrag anzeigen

Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#17

Re: problem mit "menüanzeige"

  Alt 4. Nov 2004, 16:23
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.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat