Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie kann ich die Breite eines TPopupMenu festlegen? (https://www.delphipraxis.net/128062-wie-kann-ich-die-breite-eines-tpopupmenu-festlegen.html)

berens 23. Jan 2009 11:56


Wie kann ich die Breite eines TPopupMenu festlegen?
 
Hallo!

Wie kann ich die Breite eines Popup-Menüs festlegen?

Ich möchte es in Verbindung mit einem TButton auf die selbe Breite bringen.

Danke.

sirius 23. Jan 2009 12:00

Re: Wie kann ich die Breite eines TPopupMenu festlegen?
 
Die Breite des StandardPopups von Windows kann nicht verändert werden. Diese berechnet Windows anhand der eingetragenen Menupunkte.

berens 23. Jan 2009 12:06

Re: Wie kann ich die Breite eines TPopupMenu festlegen?
 
Kann ich denn OnDrawItem nutzen um das ARect zu verändern?

Delphi-Quellcode:
OnDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
  a: TRect;
begin
  a := ARect;
  a.Right := 200;
  inherited; // geht nicht, wie rufe ich die ursprüngliche DrawItem Prozedur auf?
end;

sirius 23. Jan 2009 12:10

Re: Wie kann ich die Breite eines TPopupMenu festlegen?
 
:gruebel: Dein Menu hat ein onDrawItem-Ereignis?
Das scheint was neues zu sein. Aber ich habe noch nicht gesehen, dass Windows hier das Zepter abgibt.

Hawkeye219 23. Jan 2009 13:22

Re: Wie kann ich die Breite eines TPopupMenu festlegen?
 
Hallo,

TMenuItem.OnMeasureItem ist das richtige Ereignis - vorausgesetzt, beim PopupMenu ist das Flag OwnerDraw gesetzt.

Gruß Hawkeye

berens 23. Jan 2009 13:35

Re: Wie kann ich die Breite eines TPopupMenu festlegen?
 
Tatsächlich, geht super einfach und die Zeichenfunktion bleibt auch erhalten (ich muss also nicht per Hand zeichnen):

Beim PopupMenu OwnerDraw auf True, bei allen TMenuItems bei OnMeasureItem die Prozedur verlinken:

Delphi-Quellcode:
procedure TForm1.MyMeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);
begin
  Width := 200; // Oder eigenen Wert, ist ja klar
end;
Einwandfrei gelöst, vielen Dank, Hawkeye!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz