AGB  ·  Datenschutz  ·  Impressum  







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

TRibbon: OnDropdown?

Ein Thema von handyotto · begonnen am 5. Mai 2014 · letzter Beitrag vom 6. Mai 2014
Antwort Antwort
handyotto

Registriert seit: 6. Aug 2012
10 Beiträge
 
#1

TRibbon: OnDropdown?

  Alt 5. Mai 2014, 17:37
Hallo,

leider ist meine letzte Frage noch nicht gelöst, da stellt sich mir schon wieder eine neue, derweil ich mich durch die TRibbon (mit Delphi XE5) durchbeisse:

Ich kreiere ein individuelles Dropdown-Menü auf einem Ribbon-Knopf. Das klappt soweit wohl. Nun möchte ich, das das aufgerufen wird, in dem Moment wo das Dropdown angeklickt wird.
In einer älteren Delphi-Version hatte ich mit Developer Express ein OnDropdown. Das war genau das, was ich auch hier bräuchte. Oder eben irgendeinen "schmutzigen Trick", der auch irgendwie zum Ziel führt.

Was im DropDown stehen muss ändert sich immer wieder, es muss also wirklich immer "frisch" kreiert werden.
Aber es gibt ja nicht mal ein OnMouseMove für die Ribbons, sonst hätte ich da was versucht.

Bin für jeden Tipp dankbar
  Mit Zitat antworten Zitat
kompi

Registriert seit: 27. Apr 2012
Ort: Duisburg
55 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TRibbon: OnDropdown?

  Alt 6. Mai 2014, 10:10
Hallo,

ich gehe mal davon aus, dass mit Tribbon das in Delphi mitgelieferte Ribbon-Framework gemeint ist.

Die einzelnen Elemente sind ja vom Typ Tactionclientitem, ebenso bei einem Drop Down Menü die untergeordneten Drop Down Einträge. Diesen Einträgen kann man allen ein und dieselbe Aktion zuweisen. Will man nun wissen, welcher Eintrag angeklickt wurde, so kann man die Eigenschaft Lastsession der einzelnen Einträge auf größer 0 abfragen. Zweckmäßigerweise setzt man diese Eigenschaft anschließend wieder auf 0.

In dieser Art und Weise habe ich es in einem XE3 Projekt gelöst. Es funktioniert schon eine Weile ohne Probleme.

Gruß Kompi.
Detlef Schmitz
  Mit Zitat antworten Zitat
handyotto

Registriert seit: 6. Aug 2012
10 Beiträge
 
#3

AW: TRibbon: OnDropdown?

  Alt 6. Mai 2014, 17:14
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
  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 16:46 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