Sabberlot! Da hast Du mir zwar auf diese Frage nicht, aber auf meine andere Frage:
http://www.delphipraxis.net/179981-t...-aufrufer.html
eine prima Antwort gegeben. DANKE!
Doch langsam, erstmal hier: Ich hatte tatsächlich für jedes SubItem eine eigene Action erzeugt. Das hatte den Vorteil, dass ich dann da der Eigenschaft Tag einen Wert geben konnte. Als ActionExecute hab ich dann alle auf eine Prozedur gelenkt, wo ich anhand des Tag-Wertes unterscheiden konnte.
Hatte ggü. Deiner Methode den Vorteil, dass man nicht immer (bis zu) alle Unterpunkte abklappern muss, bis man auf den Treffer stieß, aber den deutlichen Nachteil mit dem aufräumen. Es gab verschiedene Probleme, wenn ich vor einem Neuaufbau erst durch die vorhandenen SubItems durch bin um da die jeweils zugehörigen Actions zu free'en. Hatte dann zuletzt drauf gepfiffen, den Müll liegen gelassen und immer wieder neue Actions generiert. Hat mir aber nicht wirklich gefallen. Deine Lösung, mit nur einer Action ist da viel sauberer, auch wenn das mit der Eigenschaft LastSession etwas unsauber wirkt, liest man die zugehörige Hilfeseite.
Aber meine eigentliche Frage war eine andere - ich versuchs nochmal:
Diese Funktion, die das Menü aufbaut (ob nun so oder so), muss ja immer wieder mal aufgerufen werden. Ich brauche für das Menü die Spaltenüberschriften eines StringGrids. Ich müsste also die Funktion immer dann aufrufen, wenn sich was an den Spalten(-titeln) ändert. Das ist aber mannigfaltig. Bin das mal geistig durchgegangen und es wurde sehr viel.
Deshalb dachte ich mir, es wäre das Beste, wenn das SubMenü dann aufgebaut wird, kurz bevor man es aufklappt. Also quasi in einer OnDropDown, so es sie denn gäbe. Gibts aber nicht. Habe dann noch wilde Dinge probiert, so mit MouseMove des Hauptformulars, aber das hat alles nicht geklappt. Abgesehen davon, dass dann der nächste das mit Tastatur aufrufen will.
Oder gibts da doch was?
Was mich weiterhin stört ist, wie man auf die Items zugreifen muss. Vielleicht steh ich mir da auch nur selber im Weg.
Mein Menü-"Generator" schaut im Moment so aus:
Delphi-Quellcode:
IF RibbonGroupColRow<>nil THEN
WITH RibbonGroupColRow.Items[10] DO
BEGIN
Items.Clear; // Eventuell vorhandene Items löschen
FOR ACol := sg.FixedCols+1 TO sg.ColCount - 1 DO // und neu aufbauen (sg ist ein StringGrid)
BEGIN
WITH Items.Add DO
BEGIN
Action:=GemeinsameSubAction; // Eine Action für alle SubItems
Caption:=sg.Cells[ACol,1]+': '+sg.Cells[ACol,2]; // z.B. '5: Name'
END;
END;
END;
Was, wenn nun ein Item im RibbonBar vorher eingefügt wird... oder umsortiert wird? Dann muss ich hier händisch die [10] ändern auf was auch immer dann richtig ist. Gibts da nichts besseres? Leider haben diese Items eben keine Namen.
Ich könnte höchstens alle RibbonBar-Items durchgehen und prüfen, ob die Action jene ist, die ich will. Aber das ist auch nicht wirklich prickelnd.
Jemand hier 'ne bessere Idee?
Danke