Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

Re: problem mit "menüanzeige"

  Alt 2. Nov 2004, 14:42
Zitat von stonimahoni:
also deine lösung scheint brauchbar zu sein, doch wie positionier ich das teil richtig ??

ich hab halt rechts die buttonleiste und dort soll eigentlich neben dem einen button den ich drücke das popupding aufgehen und nicht irgwendwo im formular
Du kannst die linke obere Ecke des Popupmenues festlegen.
Wenn du den Sourcecode anschaust, dann siehst du, dass die linke untere Ecke von SpeedButton1 als Ausgangspunkt dient:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   pt: TPoint;
begin
   pt.x := SpeedButton1.BoundsRect.Left;
   pt.y := SpeedButton1.BoundsRect.Bottom;
   pt := ClientToScreen(pt);
   PopupMenu1.Popup(pt.x, pt.y);
end;
Dies lässt sich verbessern, in dem man nicht SpeedButton1, sondern das übergebene Steuerelement als Ursprung nimmt:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   pt: TPoint;
   c : TControl;
begin
   c := (Sender as TControl);
   pt.x := c.BoundsRect.Left;
   pt.y := c.BoundsRect.Bottom;
   pt := ClientToScreen(pt);
   PopupMenu1.Popup(pt.x, pt.y);
end;
Man kann das PopupMenue natürlich auch so positionieren:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   pt: TPoint;
   c : TControl;
begin
   c := (Sender as TControl);
   // genau die Mitte des Controls berechnen
   pt.x := (c.BoundsRect.Right+c.BoundsRect.Left) div 2;
   pt.y := (c.BoundsRect.Top+c.BoundsRect.Bottom) div 2;
   pt := ClientToScreen(pt);
   PopupMenu1.Popup(pt.x, pt.y);
end;
Andreas
  Mit Zitat antworten Zitat