Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TComboBox in TPopupMenu (https://www.delphipraxis.net/188067-tcombobox-tpopupmenu.html)

Schwedenbitter 28. Jan 2016 08:28

TComboBox in TPopupMenu
 
Hallo,

gibt es eine Möglichkeit, in einem TPopupMenu eine TComboBox zu integrieren?

Mir ist bekannt, dass ich mir zur Not ein Fenster ohne Rahmen selbst basteln und statt des TPopupMenu anzeigen lassen könnte. Diesen komplizierten Weg würde ich aber ungern gehen, wenn es anders ging.
Ich habe bereits eine ganze Weile gesucht. Ich finde bedauerlicher Weise immer bloß Probleme damit, dass zu einer TComboBox noch ein TPopupMenu hinzugefügt werden soll.
Ich versuche es mal "aufzumalen":

Code:
MenuItem 1
MenuItem2
ComboBox 1 - Item 1
           - Item 2
           - Item 3
ComboBox 2 - Item 1
           - Item 2
           - Item 3
MenuItem 3
Bitte nicht meckern, falls das Thema hier schon besprochen wurde. Dann war ich nur zu dusselig zum Suchen und würde mich über einen Link freuen.

uligerhardt 28. Jan 2016 08:32

AW: TComboBox in TPopupMenu
 
Das dürfte schwierig werden.

Wie wäre es stattdessen mit einem Untermenü aus RadioItems?

Edit: Alternativ gingen vermutlich Third-Party-Komponenten (TB2000, DevEx?)

Schwedenbitter 28. Jan 2016 08:43

AW: TComboBox in TPopupMenu
 
Danke für die schnelle Antwort.
Zitat:

Zitat von uligerhardt (Beitrag 1328583)
Das dürfte schwierig werden.

Ich hatte es vermutet.

Zitat:

Zitat von uligerhardt (Beitrag 1328583)
Wie wäre es stattdessen mit einem Untermenü aus RadioItems?

Das passt leider nicht. In beiden Boxen sollen Zahlen stehen; in der einen TComboBox von 0 - 20 und in der anderen von 1 bis 100. Das ist mir zu viel Aufwand. Außerdem ist der Charme der ComboBoxen, dass sie immer nur einen Ausschnitt, dafür aber eine Scrollleiste, anzeigen.
Dann werde ich es über ein Fenster machen...

himitsu 28. Jan 2016 09:30

AW: TComboBox in TPopupMenu
 
Nicht mit dem "normalen" Windows-Menü, aber Fremdkomponenten können das eventuell. (z.B. bei DevExpress TdxRibbon+TdxBarApplicationMenu)

Du kannst im Parent ja den aktuellen Wert anzeigen und als Untermenü die Auswahl.
Oder man zeigt in dem Item den aktuellen Wert und beim Klick wird ein Popup oder anderes Auswahlfenster angezeigt.

Schwedenbitter 28. Jan 2016 16:41

AW: TComboBox in TPopupMenu
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu (Beitrag 1328590)
... Oder man zeigt in dem Item den aktuellen Wert und beim Klick wird ein Popup oder anderes Auswahlfenster angezeigt.

Cool. Danke. Das hat mich auf eine Idde gebracht. Ich musste erstmal nachlesen, wie man MenuItems zur Laufzeit erstellt. Aber das wäre ein befriedigender Ansatz.
Ich habe jetzt bloß 1 Problem: das "Dropdown" wird über die gesamte Höhe des Bildschirms angezeigt. Ich habe mal einen Screenshot angehängt.

Kann man das irgendwie begrenzen?
Im Objektinspektor finde ich dort auf Anhieb nichts.

[edit]
Und dann war mir entgangen, dass die Schriftgröße auch nicht zum Rest passt. Meine App/Mein Programm hat eine ziemlich große Schriftgröße zur besseren Lesbarkeit. Das PopupMenu leider nicht.

Kann man diese Größe auch irgendwie ändern?
[/edit]

Schwedenbitter 28. Jan 2016 23:40

AW: TComboBox in TPopupMenu
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe weiter probiert:
Man kann die Größe ändern, indem man das Menü selbst malt und die Parameter in
Delphi-Quellcode:
OnDrawItem
und
Delphi-Quellcode:
OnMeasureItem
für jedes einzelne Element anpasst. Aber das Ergebnis befriedigt mich optisch nicht. Zum anderen Problem des riesigen Auswahlfensters habe ich nichts gefunden.

Ich bin jetzt so weit, dass ich ein Fake-Menü über eine Form gebastelt und das Aussehen/Verhalten dem von TPopupMenu angepasst habe. Allerdings habe ich ein Problem mit der Rückmeldung:
Wenn ich das Fenster mit
Delphi-Quellcode:
ShowModal
anzeige, wäre alles schick. Allerdings passt dann das Verhalten als PopupMenu nicht mehr. Z.B. wird das Fenster nicht bei einem Klick woanders hin geschlossen und es ändert die Position nicht.
Zeige ich es mit
Delphi-Quellcode:
Show
, klappt das zwar. Aber ich tue mich schwer damit den Status des Fensters mitzubekommen.

Gibt es ein Ereignis im Hauptform, dass das Schließen eines SubForms meldet?

Anderenfalls muss ich in den sauren Apfel beißen und mit Messages arbeiten. Den Quelltext habe ich angehängt. Manchmal sagt der mehr als Worte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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