[Erledigt] Menüprobleme

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
charlytango
Beiträge: 1159
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

[Erledigt] Menüprobleme

Beitrag von charlytango »

Hi,
für meine GUI möchte ich eine Fensterliste wie im Lazarus-Menüpunkt Fenster/Windows anbieten. Die Informationen werden dazu doch etwas aufwendiger aus Screen.Forms heraus gesucht. Neben den Fenstern kommen noch andere Menüpunkte dazu, wie bei Lazarus. Ist etwas aufwendig und passt auch soweit.

tabsandmenus.jpg
tabsandmenus.jpg (13.1 KiB) 1459 mal betrachtet

Damit die GUI von außen flexibel bedient werden kann bekommt sie den Menüpunkt aus dem Hauptmenü in ein Property übergeben in dem das Menü dann aufgebaut werden soll.

Nun will ich in der Gui die gleiche Fensterliste auch in einem TPopup Menü anbieten, das zu einem Button in einer Toolbar gehört. (der Pfeil nach unten im Button ganz rechts)

Leider ist der Menüpunkt aus dem Hauptmenü ein TMenuItem und das Popupmenu ein TPopup.
Sehe ich den Wald vor lauter Bäumen nicht oder brauche ich da wirklich zwei Prozeduren wegen der unterschiedlichen Parameter ? Oder geht das eleganter?.

Muss zugeben, Menüerstellung hab ich irgendwie immer vermieden, was mir jetzt auf die Füße fällt.
Zuletzt geändert von charlytango am Mi 27. Aug 2025, 14:32, insgesamt 1-mal geändert.

charlytango
Beiträge: 1159
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Menüprobleme

Beitrag von charlytango »

Hab was das vereinfacht so aussieht.

Code: Alles auswählen

procedure TfrmCtGUI.PopulateMenus(pmnuTabMenu:TMenuItem;ToolbarTabList:TPopupMenu);
var
  I: Integer;
  MenuItem: TMenuItem;
  Form: TForm;
begin
  // Bestehende Menüpunkte löschen
  pmnuTabMenu.Clear;
  ToolbarTabList.Items.Clear;

  // Alle offenen Formulare durchlaufen
  for I := 0 to Screen.FormCount - 1 do
  begin
    Form := Screen.Forms[I];

    // Menüpunkt für TMainMenu erstellen
    MenuItem := TMenuItem.Create(pmnuTabMenu);
    MenuItem.Caption := Form.Caption;
    pmnuTabMenu.Add(MenuItem);

    // Menüpunkt für TPopupMenu erstellen
    MenuItem := TMenuItem.Create(ToolbarTabList);
    MenuItem.Caption := Form.Caption;
    ToolbarTabList.Items.Add(MenuItem);
  end;
end;
Happy bin ich da noch nicht wirklich -- hmmm

Benutzeravatar
Ally
Beiträge: 288
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Menüprobleme

Beitrag von Ally »

Hallo charlytango,

es gibt ja die ActionList, die das Menümanagement sehr vereinfacht.
Man erstellt einmal die Action und verwendet sie dann in den Menüs.

Anbei ein kleines Beispiel.

Gruß
Roland
Dateianhänge
project1.zip
(10.98 KiB) 129-mal heruntergeladen

charlytango
Beiträge: 1159
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Menüprobleme

Beitrag von charlytango »

@Ally Danke für den Code.
In diesem Fall ist eine Actionlist zu statisch. Es geht darum, dynamisch eine List der (richtigen) Fenster anzubieten wobei sich auch die Methode darauf zuzugreifen ändern kann.

Ich habe das jetzt alles in ein eigenes Objekt ausgelagert das sich um die Menüerstellung kümmert.
Die Lösung reiche ich nach wenn die GUI halbwegs braucbar ist.

Antworten