Discussion:
Frage zu Kontextmenus
(zu alt für eine Antwort)
Thomas Strasser
2015-02-03 17:59:15 UTC
Permalink
Moin allerseits,

ich habe mehrere sichtbare Komponenten, die alle ein Kontextmenu
erhalten sollen.
Dies soll prinzipiell für alle gleich sein, allerdings sollen abhängig
von der Komponente eins oder mehrere Items disabled werden.

Geht das einfacher als Kopien des PopupMenus zu erstellen und jeder
Komponente eine andere Kopie zuzuweisen?

Danke für Tipps.

(Es geht übrigens um Sudoku)

Gruß
Th. Strasser
Peter Below (TeamB)
2015-02-03 18:36:12 UTC
Permalink
Post by Thomas Strasser
Moin allerseits,
ich habe mehrere sichtbare Komponenten, die alle ein Kontextmenu
erhalten sollen. Dies soll prinzipiell für alle gleich sein,
allerdings sollen abhängig von der Komponente eins oder mehrere Items
disabled werden.
Geht das einfacher als Kopien des PopupMenus zu erstellen und jeder
Komponente eine andere Kopie zuzuweisen?
Sicher. Weise allen Controls das gleiche popup menu zu. Im OnPopup
event kann man dann die Eigenschaft PopupComponent des TPopupMenus
verwenden, um zu ermitteln, welches Control da gerade angeklickt wurde
und entsprechend menuitems manipulieren.
--
Peter Below (TeamB)
Thomas Strasser
2015-02-03 18:42:20 UTC
Permalink
Post by Peter Below (TeamB)
Sicher. Weise allen Controls das gleiche popup menu zu. Im OnPopup
event kann man dann die Eigenschaft PopupComponent des TPopupMenus
verwenden, um zu ermitteln, welches Control da gerade angeklickt wurde
und entsprechend menuitems manipulieren.
ja, das war auch mein erster Gedanke.

Aber - verändern sich daduurch nicht *alle* Menus?

Th. Strasser
Carsten Thumulla
2015-02-03 19:14:49 UTC
Permalink
Post by Thomas Strasser
Post by Peter Below (TeamB)
Sicher. Weise allen Controls das gleiche popup menu zu. Im OnPopup
event kann man dann die Eigenschaft PopupComponent des TPopupMenus
verwenden, um zu ermitteln, welches Control da gerade angeklickt wurde
und entsprechend menuitems manipulieren.
ja, das war auch mein erster Gedanke.
Aber - verändern sich daduurch nicht *alle* Menus?
Wenn es sichtbar wird die Einträge schalten.(OnPopup) Den Benutzer nicht
verwirren! Im Create zuweisen.


ct
Hans-Peter Diettrich
2015-02-04 01:34:25 UTC
Permalink
Post by Thomas Strasser
Post by Peter Below (TeamB)
Sicher. Weise allen Controls das gleiche popup menu zu. Im OnPopup
event kann man dann die Eigenschaft PopupComponent des TPopupMenus
verwenden, um zu ermitteln, welches Control da gerade angeklickt wurde
und entsprechend menuitems manipulieren.
ja, das war auch mein erster Gedanke.
Aber - verändern sich daduurch nicht *alle* Menus?
Es gibt dann nur 1 Popup Menü (Objekt), und das merkt sich seine
Einstellungen. Deshalb sollte man in OnPopup *alle* Einträge mit den zur
aktuellen Komponente passenden Einstellungen (hier: Visible bzw.
Enabled) versehen. Dann hast Du wieder die Wahl, ob Du einen einzigen
OnPopup Handler verwenden möchtest, der die passenden Einstellungen für
alle Komponenten kennt, oder jeder Komponente einen eigenen Handler
zuweist, der die Einstellungen für genau diesen Typ vornimmt. Ein
einziger Handler ist dabei IMO die bessere Wahl, insbesondere wenn die
Menü-Einträge später mal erweitert oder geändert werden - dann gibt es
genau 1 Stelle, an der die Änderungen vorzunehmen sind und überprüft
werden können.

Alternativ kannst Du auch bei der Erzeugung jeder Komponente eine Kopie
des Menü-Objekts erzeugen (Create und Assign), und dieses dann anpassen.
Beim Stichwort "Sudoku" würde ich jedoch darauf tippen, daß das Menü
ständig an den aktuellen Stand des Spielfelds angepaßt werden muß, und
damit obiger Vorschlag (1 Menü, 1 OnPopup Handler) der günstigste ist.
Ich denke dabei speziell an die Liste der noch möglichen Werte für das
aktuelle Feld, die entweder jedesmal im Handler erstellt wird, oder zu
jedem Spielfeld gehört und bei jedem Zug angepaßt wird. Falls Du was
anderes meinst, bitte genauer erklären.

Zuletzt gibt es noch den Weg über Actions (TAction, TActionList), der
jedoch IMO bei Sudoku (so wie ich das bislang verstanden habe) eher
unbrauchbar ist.

DoDi
Thomas Strasser
2015-02-04 13:50:13 UTC
Permalink
Post by Hans-Peter Diettrich
Beim Stichwort "Sudoku" würde ich jedoch darauf tippen, daß das Menü
ständig an den aktuellen Stand des Spielfelds angepaßt werden muß, und
damit obiger Vorschlag (1 Menü, 1 OnPopup Handler) der günstigste ist.
Ich denke dabei speziell an die Liste der noch möglichen Werte für das
aktuelle Feld, die entweder jedesmal im Handler erstellt wird, oder zu
jedem Spielfeld gehört und bei jedem Zug angepaßt wird. Falls Du was
anderes meinst, bitte genauer erklären.
nein, das ist es exakt :-)

Vielen Dank!

Th. Strasser
Thomas Strasser
2015-02-04 13:51:11 UTC
Permalink
Danke an alle, die geantwortet haben. Das gibt mir genug Beschäftigung,
einiges auszuprobieren.

Gruß
Th. Strasser

Loading...