[gelöst] Hamburger Menü

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
joesky
Beiträge: 21
Registriert: Fr 12. Feb 2021, 16:38

[gelöst] Hamburger Menü

Beitrag von joesky »

Gibt es für FPC/Lazarus bereits eine Komponente, die ein "Hamburger Menü" bereitstellt? Ich möchte in meinem Projekt ein Menü hinzufügen, dass sich links oder rechts der Form "versteckt" und beim Klicken auf ein Button herauskommt. Auf so einem Raspberry ist halt nicht so viel Platz und das Menü wird nur selten gebraucht. Vielleicht hat jemand so etwas bereits fertiggestellt und möchte seinen Code mit mir teilen? :wink:
Zuletzt geändert von joesky am Mo 24. Jan 2022, 23:11, insgesamt 1-mal geändert.

Benutzeravatar
Winni
Beiträge: 1339
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Hamburger Menü

Beitrag von Winni »

Hi!

Schon mal mit PopUpMenüs beschäftigt?

https://wiki.freepascal.org/TPopupMenu/de


Winni

joesky
Beiträge: 21
Registriert: Fr 12. Feb 2021, 16:38

Re: Hamburger Menü

Beitrag von joesky »

Natrürlich! Sieht aber nicht so schick aus... :)

Benutzeravatar
theo
Beiträge: 9312
Registriert: Mo 11. Sep 2006, 19:01

Re: Hamburger Menü

Beitrag von theo »

joesky hat geschrieben:
Mo 24. Jan 2022, 14:21
Natrürlich! Sieht aber nicht so schick aus... :)
Doch, das sieht sehr schick aus! :lol:
Sind sonst noch Fragen?

Warf
Beiträge: 1680
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Hamburger Menü

Beitrag von Warf »

Dafür braucht man keine komponente, einfach einen Button und ein panel.
Setze das panel genau außerhalb von der Form (also left auf - width) und die höhe auf die höhe der form. Als anchros setzt du dan left, top und bottom damit es entsprechend dem formresizing bleibt.

Beim klick auf den menü button startest du dann einen timer der mit jedem tick das fenster ein stück nach rechts bewegt bis left >= 0 ist, und für das verstecken das gleiche

Code: Alles auswählen

procedure TMainForm.ShowMenuButtonClick(Sender: TObject);
begin
  ShowMenuTimer.Enabled := True;
end;

procedure TMainForm.HideMenuButtonClick(Sender: TObject);
begin
  HideMenuTimer.Enabled := True;
end;

procedure TMainForm.ShowMenuTimerTimer(Sender: TObject);
begin
  HideMenuTimer.Enabled := False;
  MenuPanel.Left := MenuPanel.Left + 10;
  if MenuPanel.Left >=  0 then
  begin
    MenuPanel.Left := 0;
    ShowMenuTimer.Enabled := False;
  end;
end;

procedure TMainForm.HideMenuTimerTimer(Sender: TObject);
begin
  ShowMenuTimer.Enabled := False;
  MenuPanel.Left := MenuPanel.Left - 10;
  if MenuPanel.Left <= -MenuPanel.Width then
  begin
    MenuPanel.Left := -MenuPanel.Width;
    HideMenuTimer.Enabled := False;
  end;
end;
Ist die ganz einfache variante. Um ein bisschen sparsamer mit Code und Komponenten zu sein kann man das über einen Button und einen Timer + Boolean variable (show oder hide) setzen

hum4n0id3
Beiträge: 152
Registriert: So 5. Mai 2019, 15:23

Re: Hamburger Menü

Beitrag von hum4n0id3 »

Wie theo bereits gesagt hat, würde ich es auch so versuchen.

Ich habe hier ein kleines Projekt gebastelt um es zu demonstrieren.
Dateianhänge
project1.zip
(126.51 KiB) 54-mal heruntergeladen

Benutzeravatar
Winni
Beiträge: 1339
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Hamburger Menü

Beitrag von Winni »

Hi!

Wie Theo schon sagte:

Man kann PopUpMenüs auch schick machen.

Kleines Beispiel im Anhang.

Winni
Dateianhänge
popup.png
popup.png (17.88 KiB) 884 mal betrachtet

joesky
Beiträge: 21
Registriert: Fr 12. Feb 2021, 16:38

Re: Hamburger Menü

Beitrag von joesky »

Ich hab die Lösung von Warf umgesetzt, nur halt die etwas sparsamere Version. Klappt sehr gut. Vielen Dank.

Ich hab das Popupmenü auch schon mal für solche Menüs genutzt, es war aber nicht meine Idee für dieses Menü.

Antworten