AGB  ·  Datenschutz  ·  Impressum  







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

Popupmenü implementieren

Ein Thema von Rued · begonnen am 25. Feb 2025 · letzter Beitrag vom 26. Feb 2025
Antwort Antwort
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
86 Beiträge
 
Delphi 12 Athens
 
#1

Popupmenü implementieren

  Alt 25. Feb 2025, 16:36
Hallo!

Ich sitze mit Delphi 12.2 an einer Android-App, die ein Popupmenü erhalten soll, das über den Button "BMenu" aufgerufen werden soll, sein Erscheinen aber verweigert. Das Popupmenü erstelle ich in Form.create wie folgt:
Delphi-Quellcode:
var
a:integer;
Item:TMenuItem;
begin
npop1:=TCustomPopupmenu.Create(self);
npop1.Parent := BMenu; // auch Form getestet
    for a := 1 to 3 do begin
     item := TMenuItem.Create(nPop1);
           with item do begin
              name := 'item'+inttostr(a);
              tag := a;
              text := inttostr(a);
              onclick := PopupMenuItemsClick;
           end;
       nPop1.AddObject(item);
    end;
  //nPop1.Popup(100,100); auskommentiert, da App sonst nicht startet
   BMenu.PopupMenu := nPop1;
Im onClick des Button steht:
Delphi-Quellcode:
nPop1.Popup(100,100); //auch auskommentiert
nPop1.BringToFront;
Der Klick auf den Button führt zur Fehlermeldung "Abstrakter Fehler.". Wenn ich "nPop1.Popup(100,100)" auskommentiere bekomme ich keine Fehlermeldung, aber auch sonst tut sich nichts.

Was muss ich tun?
Rüdiger Droste
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.551 Beiträge
 
Delphi 7 Professional
 
#2

AW: Popupmenü implementieren

  Alt 25. Feb 2025, 16:43
Delphi-Quellcode:
var
  a: Integer;
  Item: TMenuItem;
begin
  npop1 := TPopupMenu.Create(self);
  for a := 1 to 3 do
  begin
    item := TMenuItem.Create(nPop1);
    item.Name := 'item' + IntToStr(a);
    item.Tag := a;
    item.Caption := IntToStr(a);
    item.OnClick := PopupMenuItemsClick;
    nPop1.Items.Add(item);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.589 Beiträge
 
Delphi 12 Athens
 
#3

AW: Popupmenü implementieren

  Alt 25. Feb 2025, 16:45
Korrekt!

In TCustomPopupMenu ist Popup abstrakt:
Delphi-Quellcode:
  TCustomPopupMenu = class(TFmxObject)
  private
    [Weak] FPopupComponent: TComponent;
    FOnPopup: TNotifyEvent;
  protected
    procedure DoPopup; virtual;
    property OnPopup: TNotifyEvent read FOnPopup write FOnPopup;
  public
    procedure Popup(X, Y: Single); virtual; abstract;
    property PopupComponent: TComponent read FPopupComponent write FPopupComponent;
  end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
313 Beiträge
 
Delphi 12 Athens
 
#4

AW: Popupmenü implementieren

  Alt 25. Feb 2025, 16:50
Ist TCustomPopUpMenu überhaupt eine zulässige Klasse auf Android? Ich frage, weil das normale TPopUpMenu dies NICHT ist (und in der Komponentenpalette dementsprechend ausgegraut ist auf Android).
Wenn ich mich nicht irre, gibt es für die mobile Entwicklung nur PopUp-Komponenten, aus denen man sich selbst ein Menü bauen muss.

Sollte dem so sein, werfe ich als Alternative mal die TMultiView in den Raum, bei der man die "Mode" auf "PopOver" setzen kann. Diese verwende ich als PopUp-Komponente in meinen Apps, da sie einige nützliche Funktionen mit sich bringt, wie z.B. dass sie automatisch bei der eingestellten Masterkomponente aufpoppt.
Es gibt wohl auch TPopup, habe ich aber bisher nicht verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.589 Beiträge
 
Delphi 12 Athens
 
#5

AW: Popupmenü implementieren

  Alt 25. Feb 2025, 17:02
Ist TCustomPopUpMenu überhaupt eine zulässige Klasse auf Android?
Das ist eine berechtigte Frage und die Antwort ist in der Tat "Nein". Nur Plattformen, die IFMXMenuService implementieren, können mit den FMX Menu-Komponenten arbeiten. Das sind aktuell lediglich Windows, MacOS und Linux.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
86 Beiträge
 
Delphi 12 Athens
 
#6

AW: Popupmenü implementieren

  Alt 25. Feb 2025, 19:41
Ist TCustomPopUpMenu überhaupt eine zulässige Klasse auf Android?
Das ist eine berechtigte Frage und die Antwort ist in der Tat "Nein". Nur Plattformen, die IFMXMenuService implementieren, können mit den FMX Menu-Komponenten arbeiten. Das sind aktuell lediglich Windows, MacOS und Linux.
Das ist bitter. Wie realisiere ich dann ein aufklappendes Menü? Mit Listbox oder ComboBox hoffentlich nicht.
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.816 Beiträge
 
Delphi 12 Athens
 
#7

AW: Popupmenü implementieren

  Alt 25. Feb 2025, 20:06
Das ist bitter. Wie realisiere ich dann ein aufklappendes Menü? Mit Listbox oder ComboBox hoffentlich nicht.
Doch, eine TListbox ist eine Option. Du kannst diese in ein TPopup packen. Du kannst natürlich auch andere Komponenten in TPopup verwenden. Und dann kannst du es einfach anzeigen:
Delphi-Quellcode:
  Popup1.PlacementTarget := Button1;
  Popup1.IsOpen := not Popup1.IsOpen;
Üblicher ist aber das Hamburger-Menü als Seitenmenü zu verwenden. Das geht mit TMultiView wie von AuronTLG bereits erwähnt (MultiView1.ShowMaster, MultiView1.HideMaster, ...).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
86 Beiträge
 
Delphi 12 Athens
 
#8

AW: Popupmenü implementieren

  Alt 26. Feb 2025, 08:35
Ich danke Euch. Dann werde ich mich mal mit TMultiView versuchen. "Hamburger-Menü" klingt ungesund - Burger, Pommes und zuckrige Cola.
Rüdiger Droste
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
312 Beiträge
 
Delphi 12 Athens
 
#9

AW: Popupmenü implementieren

  Alt 26. Feb 2025, 08:55
Ich danke Euch. Dann werde ich mich mal mit TMultiView versuchen. "Hamburger-Menü" klingt ungesund - Burger, Pommes und zuckrige Cola.
TMultiView hat auch den Modus PopUp und macht dann genau das was du möchtest. Einfach deinen Button als Masterbutton setzen. Verschachtelte Menüs lassen sich so auch umsetzen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.816 Beiträge
 
Delphi 12 Athens
 
#10

AW: Popupmenü implementieren

  Alt 26. Feb 2025, 09:11
"Hamburger-Menü" klingt ungesund - Burger, Pommes und zuckrige Cola.
Es gibt ja auch Zero Cola.
Aber im Ernst: Das Wort Hamburger bezieht sich tatsächlich nur auf die Scheiben eines Hamburgers, weil das Symbol zum Aufrufen aus den drei horizontalen Strichen besteht.

Hier findest du übrigens Erklärungen und vor allem Screenshots zu den Möglichkeiten der TMultiView:
https://docwiki.embarcadero.com/RADS...and_Android%29
Sebastian Jänicke
AppCentral

Geändert von jaenicke (26. Feb 2025 um 09:14 Uhr)
  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 21:15 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 by Thomas Breitkreuz