AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Breite eines PopUpMenüs ermitteln

Ein Thema von sh17 · begonnen am 15. Dez 2005 · letzter Beitrag vom 15. Dez 2005
Antwort Antwort
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#1

Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 06:03
Wie kann man die Breite und Höhe eines Popupmenus ermitteln, die es geöffnet auf dem Bildschirm einnimmt?
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#2

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 08:51
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 !
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 09:00
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
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#4

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 09:18
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;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 10:01
Hallo Sven,

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
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 10:09
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)
Miniaturansicht angehängter Grafiken
aufnahme2_118.jpg   aufnahme1_422.jpg  
Sven Harazim
--
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 11:05
Wenn du dein PopupMenü grundsätzlich am rechten Fensterrand ausrichten willst, dann kannst du auch PopupMenu.Alignment auf paRight setzen...

marabu
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Breite eines PopUpMenüs ermitteln

  Alt 15. Dez 2005, 11:08
sag das doch gleich
aber viele Wege führen nach Rom, meine in eine Sackgasse
Sven Harazim
--
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 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