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 Breite eines PopUpMenüs ermitteln (https://www.delphipraxis.net/58968-breite-eines-popupmenues-ermitteln.html)

sh17 15. Dez 2005 06:03


Breite eines PopUpMenüs ermitteln
 
Wie kann man die Breite und Höhe eines Popupmenus ermitteln, die es geöffnet auf dem Bildschirm einnimmt?

chrisw 15. Dez 2005 08:51

Re: Breite eines PopUpMenüs ermitteln
 
Die Eigenschaft OwnerDraw des PopUpMenus auf True;
In einem der MenuItems das Ereignis OnMeasureItem abfragen, dort ist Width und Height abgreifbar ! Height * Anzahl Items ergibt die Gesamthöhe !

sh17 15. Dez 2005 09:00

Re: Breite eines PopUpMenüs ermitteln
 
leider ist es da schon zu spät, da ich vor dem Popup wissen muss, wie Breit es wird. dementsprechend soll der Popuppunkt angepasst werden

chrisw 15. Dez 2005 09:18

Re: Breite eines PopUpMenüs ermitteln
 
Versuch mal das (Allerdings nicht getestet)
Mglw müssen da noch ein paar Pixel dazu !
[EDIT] Überarbeitete Version !

Delphi-Quellcode:
function GetPopUpMenuWidth(PopUpMenu : TPopUpMenu; Canvas : TCanvas) : Integer;
var i : Integer;
    LongestCaption : Integer;
begin
  LongestCaption := -1;
  Result := 0;
  for i := 0 to PopUpMenu.Items.Count -1 do
  if LongestCaption < length(TMenuItem(PopUpMenu.Items[i]).Caption) then
  begin
    LongestCaption := length(TMenuItem(PopUpMenu.Items[i]).Caption);
    Result := Canvas.TextWidth(TMenuItem(PopUpMenu.Items[i]).Caption );
  end;
end;

function GetPopUpMenuHeight(PopUpMenu : TPopUpMenu; Canvas : TCanvas) : Integer;
begin
  Result := 0;
  if PopUpMenu.Items.Count > 0 then
  Result := Canvas.TextHeight(PopUpMenu.Items[0].Caption) + 21 * PopUpMenu.Items.Count;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(Inttostr(GetPopUpMenuWidth(PopUpMenu1,Canvas)));
  showmessage(Inttostr(GetPopUpMenuHeight(PopUpMenu1,Canvas)));
end;

marabu 15. Dez 2005 10:01

Re: Breite eines PopUpMenüs ermitteln
 
Hallo Sven,

Zitat:

Zitat von sh17
leider ist es da schon zu spät, da ich vor dem Popup wissen muss, wie Breit es wird. dementsprechend soll der Popuppunkt angepasst werden

an was willst du denn dein MenuItem anpassen? An die Breite des PopupMenus? Windows selbst berechnet die Breite und Höhe des Menüs aus den Captions (a) direkt vor dem ersten rendering und (b) nochmal, falls inzwischen items geändert wurden. Die Breite erfährst du frühestens hinterher. Wozu solltest du die auch brauchen?

Grüße vom marabu

sh17 15. Dez 2005 10:09

Re: Breite eines PopUpMenüs ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 2)
schau euch mal die Bilder im Anhang an. das popupmenu erscheint, wenn ich auf den Button klicke per PopUp(x,y)

2. Bild (aufnahme1) ist optimal, weil das Fenster am rechten Bildschirmrand klebt

verschiebe ich das fenster nach links kommt der Zustand im 1. Bild (aufnahme2) zustande. Das sie blöd aus

ich brauch die Breite des Popupmenus, damit ich immer das richtige x berechnen kann.

Mit der Höhe klappt es schon. (9 + Item.Count*19)

marabu 15. Dez 2005 11:05

Re: Breite eines PopUpMenüs ermitteln
 
Wenn du dein PopupMenü grundsätzlich am rechten Fensterrand ausrichten willst, dann kannst du auch PopupMenu.Alignment auf paRight setzen...

marabu

sh17 15. Dez 2005 11:08

Re: Breite eines PopUpMenüs ermitteln
 
sag das doch gleich :-D
aber viele Wege führen nach Rom, meine in eine Sackgasse


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.

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