Ideensammlung

Hilfsmittel zur Gestaltung und Steuerung von Ribbons (ab Office 2007)

Ideensammlung

Beitragvon Josef Pötzl » Di 27. Mär 2012, 10:12

Hallo!

Was benötigt man alles für die Gestaltung und Steuerung eines Ribbon?

  • Ribbon-Controls als Elemente um per Code (IntelliSense) ein Ribbon (XML-Text) zusammenstellen zu können
  • Ribbon-XML aus Tabelle auslesen (Tabs, Groups und Controls inkl. deren Eigenschaften als Einträge in Tabellen)
  • Tab-Wechsel u. ä. als Ereignis ausgeben bzw. generell die Callbacks als Ereignis gestalten
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Ideensammlung

Beitragvon Josef Pötzl » Di 27. Mär 2012, 10:24

Ich gestalte derzeit das Ribbon aus Tabelleneinträgen.
Prinzip: Per VBA-Code wird der Ribbon-XML-Text zusammengestellt. Je nach Bedarf werden Callbacks eingebaut.

Wenn ich in der Anwendung einen Tab-Wechsel mitbekommen will, wird zusätzlich ein unsichtbares Control je Tab eingebaut, auf dessen Visible-Callback ich das Tab-Wechsel-Ereignis auslöse.

Beispiel:
Auf diese Weise habe ich eine Anwendung gestaltet, die beim Tab-Wechsel das zum Tab passende Formular öffnet. Im Tab selbst sind dann die Filter-Bedingungen untergebracht.
Anm.: das war ein Versuch, das Ribbon direkt mit den Formularen zu koppeln um für den Anwender eine übersichtliche Bedienoberfläche zu gestalten.
Die Formulare selbst sind in dieser Anwendung in der Dokumentenregisteransicht gestaltet, wobei das Register (im Produktivbetrieb) allerdings nicht angezeigt wird.
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Ideensammlung

Beitragvon Josef Pötzl » Di 27. Mär 2012, 10:33

BTW: Ich nannte das Projekt für den Anfang einmal "RibbonTools" ... das können wir aber ändern, wenn sich (aufgrund des Inhalts) ein bessere Name ergibt.
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Ideensammlung

Beitragvon Sten Schmidt » Di 27. Mär 2012, 10:54

Josef Pötzl hat geschrieben:Was benötigt man alles für die Gestaltung und Steuerung eines Ribbon?


  • Eine sinvolle Möglichkeit Callback-Methoden zu gestalten *
  • Ribbon-XML aus Tabelle oder Textfile auslesen, in einem Objekt speichern, etwas Ändern und zurückschreiben
  • Eine Möglichkeit die Control-Tags mit zusätzlichen Angaben zu füllen (z.B. Berechtigungslevel, oder direkte weitergabe an DoCmd) **

* Ich meine hier insbesondere ohne unendlich Ausdrücke wie:

Code: Alles auswählen

If ribboncontrol.tag = "foo" then MachWas()
else if ribboncontrol.tag = "bar" then MachWasAnderes()
else if ....
...
 


** Hierzu habe ich schon etwas Code aus einem anderen Projekt, aber es ist auch nur Teststadium

Code: Alles auswählen

    /// <summary>
    /// Klasse zum Parsen des IRibbonControl.Tag-Values
    /// </summary>
    class CustomRibbonControlTag
    {
        public string TagString { get; private set; }
        public List<CustomRibbonControlTagElement> TagElements { get; private set; }

        /// <summary>
        /// Klasse zum Parsen des IRibbonControl.Tag-Values
        /// <remarks>
        /// Über die generische Liste TagElements können die erkannten Elemente abgerufen werden.
        /// </remarks>
        /// </summary>
        /// <param name="tagString">IRibbonControl.Tag-Value</param>
        public CustomRibbonControlTag(string tagString)
        {
            this.TagElements = new List<CustomRibbonControlTagElement>();
            this.TagString = tagString;

            string[] tagElements = this.TagString.Split(';');
           foreach (string tagElement in tagElements)
            {
                string[] tagElementContent = tagElement.Split(':');

                CustomRibbonControlTagElement te = new CustomRibbonControlTagElement();
                te.ElementName = tagElementContent[0];
                te.ElementValue = tagElementContent[1];
                te.IsVBAStyleValue = tagElementContent[1].StartsWith("=");

                this.TagElements.Add(te);
            }
        }
    }

    class CustomRibbonControlTagElement
    {
        public string ElementName { get; set; }
        public string ElementValue { get; set; }

        /// <summary>
        /// Gibt an ob das ElementValue mit einem Istgleich-Zeichen beginnt
        /// </summary>
        public bool IsVBAStyleValue { get; set; }
    }
 
Zuletzt geändert von Sten Schmidt am Di 27. Mär 2012, 11:11, insgesamt 2-mal geändert.
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Ideensammlung

Beitragvon Josef Pötzl » Di 27. Mär 2012, 11:06

Hallo!

Bei mir sieht das (derzeit noch in VBA) z. B. so aus:
1. Einerseits schreibe ich direkt in OnAction einen Funktionsaufruf. Beispiel: "=RibbonActionFormOpen('fProjectList')" .. diese Variante verwende ich am meisten
2. Ich lass eine Klasse den Callback-Aufruf durchführen.
Code: Alles auswählen
Public Sub RibbonWatcherCallBack_OnAction(ByRef rc As IRibbonControl)
   CurrentRibbonWatcher.CallRibbonControlOnAction rc
End Sub

=> in CallRibbonControlOnAction hole ich mir passend zum jeweiligen Ribbon-Control noch Parameter für einen Prozeduraufruf und rufe die Prozedur über Application.Run auf.
Vorteil: das Modul mit den Callback-Funktionen bleibt übersichtlich.

3. (Noch nicht vollständig umgesetzt): man könnte statt den Callback-Aufrufen auf Ereignisse umstellen, dann hätte man das Ribbon entkoppelt und die "Anwendungssteuerung könnte dann je nach Ereignis und dessen Parameter entscheiden, was passieren soll.

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Ideensammlung

Beitragvon Josef Pötzl » Di 27. Mär 2012, 11:40

Noch etwas kann hilfreich sein:
CommandBarConverter ... Wandelt Commandbar-Einträge in Ribbon-Struktur um.
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Ideensammlung

Beitragvon Sten Schmidt » Di 27. Mär 2012, 11:55

Josef Pötzl hat geschrieben:Noch etwas kann hilfreich sein:
CommandBarConverter ... Wandelt Commandbar-Einträge in Ribbon-Struktur um.


Cool, ja genau, oder auch umgekehrt, ich wandle meinen Ribbon in eine CommandBar wenn ich Access 2003 unterstützen muss.
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Ideensammlung

Beitragvon FireWalkerHH » Di 27. Mär 2012, 15:16

Ich glaube Du hast schon alles gesagt ... mehr fällt mir gerade auch nicht ein!
Thomas Franzek

Diese Signatur wurde mit 100% chlorfrei gebleichten, glücklichen Elektronen erzeugt.
Diese entstammen keiner Lagerelektronenhaltung und werden nicht zu ihrer Arbeit gezwungen
FireWalkerHH
Entwickler
 
Beiträge: 57
Registriert: Mo 18. Okt 2010, 12:13

Re: Ideensammlung

Beitragvon Josef Pötzl » Di 27. Mär 2012, 16:48

Hallo!

Ein Beispiel, wie ich das Ribbon derzeit (zumindest so ähnlich) mit VBA verwende: VbaRibbonWatcher.zip
Anm.: Der Code ist im Beispiel etwas zusammengestoppelt. Daher bitte das nicht als sauberen Code betrachten, der in .NET umgesetzt werden kann. Das Beispiel soll nur ein mögliches Szenario zeigen.

In diesem Beispiel nutze ich je eine Tabelle für Tabs, Groups und Controls. Die Datensätze sind 1:n verbunden.
Sollte man die Tabellen n:m verbinden, damit Control-Definitionen mehrfach verwendet werden können?

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)


Zurück zu RibbonTools

cron