Post by Thomas StrasserPost 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