![]() |
Gesamtbreite der Mainmenüs
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
wie kann man die Gesamtbreite des Mainmenus ermitteln? Ein Versuch über GetMenuItemRect(Application.MainForm.Menu...) funktionierte nicht wenn das MainMenu eines 2. Forms in das MainMenu des Hauptforms merged, da Application.MainForm.Menu.Items.Count die gemergeten Menüs nicht berücksichtigt? Mein Vorhaben ist es den Non-Client Bereich der neben den Mainmenü ist zu zeichen (siehe Anhang). Bin für jeden Hinweis dankbar Gottes Segen |
Re: Gesamtbreite der Mainmenüs
Hi,
hat keiner eine Idee? Momentan mache ich folgerndermassen:
Delphi-Quellcode:
Allerdings scheint dies "ungenau" zu sein (-4 beim Inc), aber auch bei mehreren Instanzen eines MDI Child wird momentan nicht geprüft ob dessen menu schon mit berechnet wurde. Auch bei nicht gemerten Menus gäbe es hier Probs, und auch wenn ein Form nicht Application als Owner hat (nicht in Application.Components ist)!
for j := 0 to Application.ComponentCount-1 do begin
if Application.Components[j].InheritsFrom(TCustomForm) then begin LForm := TCustomForm(Application.Components[j]); LMainMenu := LForm.Menu; if LMainMenu <> nil then begin for i := 0 to LMainMenu.Items.Count-1 do begin GetMenuItemRect(LForm.Handle, LMainMenu.Handle, i, MenuRect); Inc(XMenu, (MenuRect.Right - MenuRect.Left)-4); //-4 muss sein - warum auch immer end; end;//if MainMenu found end;//if Component is CustomForm end; Also falls jemand noch eine Idee hat, wie man das richtig macht - Bitte posten! :stupid: Shalom |
Re: Gesamtbreite der Mainmenüs
Versuch's mal mit dem Handle.
(ungetestet)
Delphi-Quellcode:
Danach steht in R.Right der rechte Rand des letzten Elements in Bildschirmkoordinaten - dies ist gleichzeitig der linke Rand des nicht benutzten Bereichs.
// var R: TRect;
with Application.MainForm do GetMenuItemRect(Handle, Menu.Handle, GetMenuItemCount(Menu.Handle) - 1, R); |
Re: Gesamtbreite der Mainmenüs
Zitat:
Delphi-Quellcode:
Shalom
GetWindowRect(FParentForm.Handle, WndRect);
if Application.MainForm <> nil then begin with Application.MainForm do GetMenuItemRect(Handle, Menu.Handle, GetMenuItemCount(Menu.Handle) - 1, R); CaptRect.Left := Application.MainForm.ScreenToClient(Point(R.Right, 0)).X; CaptRect.Top := GetSystemMetrics(SM_CYEDGE)+1; CaptRect.Right := WndRect.right-WndRect.Left-GetSystemMetrics(SM_CYEDGE) - 1; CaptRect.Bottom := GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYEDGE); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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