Discussion:
Access 2007 - Ribbon Ereignis Tabwechsel
(zu alt für eine Antwort)
Günther Pachschwöll
2010-04-11 19:30:46 UTC
Permalink
Hallo NG,

ich bin gerade dabei mein Programm mit Ribbons auszustatten
anstatt ocx Komponenten zu verwenden. Jetzt bin ich auf der Suche
nach dem Code mit dem man ein Ereignis ausführen lassen kann
wen man einen Tabwechsel durchführ. Ich habe dazu schon gegooglt,
ich dazu nur einen Ansatz gefunden der automatisch aus dem
englischen übersetzt worden ist, dabei verstehe ich leider nur Bahnhof.

Gibt es die Möglichkeit überhaupt bzw. wie kann ich das anstellen ein
Ereignis bei einem Tabwechsel auszulösen?

Grüße
Günther
Thomas Möller
2010-04-11 20:31:42 UTC
Permalink
Hallo Günther,
Post by Günther Pachschwöll
ich bin gerade dabei mein Programm mit Ribbons auszustatten
anstatt ocx Komponenten zu verwenden. Jetzt bin ich auf der Suche
nach dem Code mit dem man ein Ereignis ausführen lassen kann
wen man einen Tabwechsel durchführ. Ich habe dazu schon gegooglt,
ich dazu nur einen Ansatz gefunden der automatisch aus dem
englischen übersetzt worden ist, dabei verstehe ich leider nur Bahnhof.
hast Du Dich schon bei Gunter umgesehen?
http://www.accessribbon.de/?Willkommen
(Link in einer Zeile)


CU
--
Thomas

Homepage: www.Team-Moeller.de
Günther Pachschwöll
2010-04-11 21:04:04 UTC
Permalink
Hallo Thomas
Post by Thomas Möller
hast Du Dich schon bei Gunter umgesehen?
http://www.accessribbon.de/?Willkommen
(Link in einer Zeile)
Ich habe mir schon alle DemoDBs angeschaut, nur das
was ich mir vorstelle habe ich noch nicht gefunden.

Günther
Peter Doering
2010-04-11 22:47:35 UTC
Permalink
Hallo,
Post by Günther Pachschwöll
Post by Thomas Möller
hast Du Dich schon bei Gunter umgesehen?
http://www.accessribbon.de/?Willkommen
(Link in einer Zeile)
Ich habe mir schon alle DemoDBs angeschaut, nur das
was ich mir vorstelle habe ich noch nicht gefunden.
Hmm, falls sich der Tabwechsel auf das Registersteuerelement bezieht, waere
http://www.accessribbon.de/index.php?Downloads:12 was du suchst.

Falls du mit "Ereignis bei Tabwechsel" das Register im Ribbon meinst, dabei
wird kein Ereignis erzeugt. Du koenntest als Workaround einen Button
verwenden, in dem du den Tabwechsel vornimmst, siehe
http://www.accessribbon.de/index.php?Downloads:20

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Gunter Avenius
2010-04-12 05:04:39 UTC
Permalink
Hallo Günther,
Post by Günther Pachschwöll
ich bin gerade dabei mein Programm mit Ribbons auszustatten
anstatt ocx Komponenten zu verwenden. Jetzt bin ich auf der Suche
nach dem Code mit dem man ein Ereignis ausführen lassen kann
wen man einen Tabwechsel durchführ. Ich habe dazu schon gegooglt,
ich dazu nur einen Ansatz gefunden der automatisch aus dem
englischen übersetzt worden ist, dabei verstehe ich leider nur Bahnhof.
Gibt es die Möglichkeit überhaupt bzw. wie kann ich das anstellen ein
Ereignis bei einem Tabwechsel auszulösen?
gar nicht. RibbonTab Change gibt es nicht, auch ein RibbonTab Klick
gibt es nicht.

http://www.accessribbon.de/?Access_-_Ribbons:Ribbon_XML___Controls:Tab

Gruß
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de
http://www.ribboncreator.de
Josef Poetzl
2010-04-12 11:28:19 UTC
Permalink
Hallo!
... Jetzt bin ich auf der Suche
nach dem Code mit dem man ein Ereignis ausführen lassen kann
wen man einen Tabwechsel durchführ. Ich habe dazu schon gegooglt,
ich dazu nur einen Ansatz gefunden der automatisch aus dem
englischen übersetzt worden ist, dabei verstehe ich leider nur Bahnhof.
Hast du diesen Link noch?
Diesen Ansatz würde ich mir nämlich gerne ansehen.

mfg
Josef
--
Code-Bibliothek für Access-Entwickler: http://access-codelib.net/
Access-FAQ von Karl Donaubauer: http://www.donkarl.com/
Günther Pachschwöll
2010-04-13 18:23:45 UTC
Permalink
Hallo Josef,
Post by Josef Poetzl
Hast du diesen Link noch?
Diesen Ansatz würde ich mir nämlich gerne ansehen.
http://translate.google.at/translate?hl=de&langpair=en|de&u=http://en.allexperts.com/q/Using-MS-Access-1440/2009/6/Access-Ribbon-Tab-Click-1.htm

hoffe der Link funktioniert auch

Günther
Jens Schilling
2010-04-13 18:43:09 UTC
Permalink
Hallo, Günther
Post by Günther Pachschwöll
Hallo Josef,
Post by Josef Poetzl
Hast du diesen Link noch?
Diesen Ansatz würde ich mir nämlich gerne ansehen.
http://translate.google.at/translate?hl=de&langpair=en|de&u=http://en.allexperts.com/q/Using-MS-Access-1440/2009/6/Access-Ribbon-Tab-Click-1.htm
hoffe der Link funktioniert auch
In dem Thread geht Scott auf das "Tab Control" ein - also das
Registersteuerelement; hilfe zum Problem mit dem Tab-Control eines Ribbons
kann auch er nicht geben.

Von daher kann auch Dir der Thread nicht helfen.
--
Gruss
Jens

FAQ: http://www.donkarl.com
Josef Poetzl
2010-04-13 18:44:41 UTC
Permalink
Hallo!
Post by Günther Pachschwöll
http://translate.google.at/translate?hl=de&langpair=en|de&u=http://en.allexperts.com/q/Using-MS-Access-1440/2009/6/Access-Ribbon-Tab-Click-1.htm
Danke für den Link. Diesen Ansatz kannst du aber für Ribbon-Tabs
vergessen, da das nur die Lösung für ein Registersteuerelement ist.

Warum willst du eigentlich auf den Tab-Wechsel im Ribbon reagieren
können?
Vielleicht gibt es alternative Ansätze, damit du das nicht benötigst.
Z. B. erst beim ersten Klick auf ein Ribbon-Control den Wechsel
weiterleiten.

Ansonsten hätte ich noch eine Frage an die API-Spezialisten:
Wäre es möglich, mittels Subclassing einen Tab-Wechsel abzufangen?

mfg
Josef
--
Code-Bibliothek für Access-Entwickler: http://access-codelib.net/
Access-FAQ von Karl Donaubauer: http://www.donkarl.com/
Günther Pachschwöll
2010-04-13 20:59:22 UTC
Permalink
Hallo Josef
Post by Josef Poetzl
Warum willst du eigentlich auf den Tab-Wechsel im Ribbon reagieren
können?
Vielleicht gibt es alternative Ansätze, damit du das nicht benötigst.
Z. B. erst beim ersten Klick auf ein Ribbon-Control den Wechsel
weiterleiten.
Der Grund warum ich auf den Tabwechsel reagieren möchte ist der,
das ich ein Hauptformular habe mit einem Subformular, dass sich
je nach Auswahl eines Tab ändern soll. Ich habe jetzt eine andere
(externe) Lösung dafür, nur ist die mit einer eigenen ocx Datei.
Ich würde aber aufgrund von diversen Probleme auf den unter-
schiedlichen System lieber AccessBordmittel verwenden und
außerdem würde dann mein Platz im Formular größer werden.

Grüße
Günther
Josef Poetzl
2010-04-14 07:41:56 UTC
Permalink
Hallo!
Post by Günther Pachschwöll
Der Grund warum ich auf den Tabwechsel reagieren möchte ist der,
das ich ein Hauptformular habe mit einem Subformular, dass sich
je nach Auswahl eines Tab ändern soll.
Verstehe ich dich richtig: du nutzt im Prinzip das Ribbon wie ein
TabControl im Hauptformular. Das Hauptformular ist maximiert und das
Ribbon ist in dieser Anwendung als Bestandteil des Formulars und nicht
zur Steuerung der Anwendung (öffnen von Formularen usw.) zu
betrachten.

Somit würde dann vermutlich auch der Vorschlag von Peter weg fallen,
das Ribbon von der Anwendung aus zu beeinflussen, da der Benutzer über
die Wahl des Ribbon-Tab das Unterformular wählt und die Anwendung
darauf reagieren muss.

Mit Access-Bordmittel kenne ich keine Lösung für dieses Szenario (und
ein extra Ribbon-Button "xxx anzeigen" zum Wechseln des UF wird nicht
besonders benutzerfreundlich sein, da der Benutzer mit dem Tabwechsel
bereits entschieden hat, das UF zu sehen).

Ich vermute, dass die Access-Entwickler nicht an so ein Szenario
gedacht hatten. :-))

Vielleicht kann man über Subclassing etwas basteln. Ob und wie das
geht weiß ich nicht, da kenne ich mich zu wenig mit Subclassing aus.

Somit bleibt vermutlich doch nur der Vorschlag von Peter als Lösung
übrig und du baust im Hauptformular noch zusätzlich ein paar
Umschaltflächen ein, die das UF und gleichzeitig das Ribbon-Tab
wechseln oder die Steuerelement im Ribbon-Tab des HF ändern (also
nicht mehrere Tab erstellen, sondern vom HF aus die angezeigten
Ribbon-Controls ändern - das erspart dann einen Tab-Wechsel und der
Benutzer kommt gar nicht auf den Gedanken, über die Ribbon-Tabs das UF
wechseln zu wollen).

mfg
Josef
--
Code-Bibliothek für Access-Entwickler: http://access-codelib.net/
Access-FAQ von Karl Donaubauer: http://www.donkarl.com/
Peter Doering
2010-04-13 23:19:05 UTC
Permalink
Hallo,
Post by Josef Poetzl
Warum willst du eigentlich auf den Tab-Wechsel im Ribbon reagieren
können?
Vielleicht gibt es alternative Ansätze, damit du das nicht benötigst.
Z. B. erst beim ersten Klick auf ein Ribbon-Control den Wechsel
weiterleiten.
So wie ich das weiter oben bereits vorgeschlagen hatte ;-)
Deshalb auch den Link zur Beispiel-DB "Aktivieren eines Tabs".

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Josef Poetzl
2010-04-14 07:53:14 UTC
Permalink
Hallo!
Post by Peter Doering
Post by Josef Poetzl
Vielleicht gibt es alternative Ansätze, damit du das nicht benötigst.
Z. B. erst beim ersten Klick auf ein Ribbon-Control den Wechsel
weiterleiten.
So wie ich das weiter oben bereits vorgeschlagen hatte ;-)
Deshalb auch den Link zur Beispiel-DB "Aktivieren eines Tabs".
... falls Günther das will. ;-)
Ich verstand sein Vorhaben nämlich so, dass der Benutzer das
Ribbon-Tab wählt und die Anwendung darauf reagieren soll.
Damit man das "Aktivieren eines Tabs" funktioniert, muss der Benutzer
der Anwendung mitteilen, dass er wechseln will. => Anwendung steuert
Ribbon.
Gesucht ist nach meinem Verständnis: Anwendung reagiert auf Ribbon.

Lösungsansatz? ... ich bin ratlos ;-)
(siehe meine Antwort auf Günthers letzten Beitrag)


mfg
Josef
--
Code-Bibliothek für Access-Entwickler: http://access-codelib.net/
Access-FAQ von Karl Donaubauer: http://www.donkarl.com/
Peter Doering
2010-04-14 08:12:28 UTC
Permalink
Hallo,
Post by Josef Poetzl
Post by Peter Doering
Post by Josef Poetzl
Vielleicht gibt es alternative Ansätze, damit du das nicht benötigst.
Z. B. erst beim ersten Klick auf ein Ribbon-Control den Wechsel
weiterleiten.
So wie ich das weiter oben bereits vorgeschlagen hatte ;-)
Deshalb auch den Link zur Beispiel-DB "Aktivieren eines Tabs".
... falls Günther das will. ;-)
Ich verstand sein Vorhaben nämlich so, dass der Benutzer das
Ribbon-Tab wählt und die Anwendung darauf reagieren soll.
So hatte ich das zuletzt auch verstanden.
Post by Josef Poetzl
Damit man das "Aktivieren eines Tabs" funktioniert, muss der Benutzer
der Anwendung mitteilen, dass er wechseln will. => Anwendung steuert
Ribbon.
Aber da das per Ribbon-Tab nicht funktioniert, muesste man auf ein
Ribbon-Control ausweichen, welches einen Callback liefert, z.B. Button
(aber nicht ausschliesslich).

Den Callback muesste man nur einmal vorhalten und nur mit anderen
Parametern fuettern, um andere UFos und Ribbon-Tabs zu aktivieren. Aber was
die Ribbons angeht, muesste sich die Funktionalitaet natuerlich ueber alle
Tabs hinweg wiederholen, was in der Tat nicht im Sinne des Erfinders ist.
Was das Ribbon-Layout angeht, ist man zusaetzlich noch eingeschraenkt, weil
man nur zwischen Normal und Large unterscheiden kann.

Insofern komme ich zum gleichen Schluss: das wird nix.

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Sascha Trowitzsch
2010-04-15 12:10:36 UTC
Permalink
Hi,
Post by Josef Poetzl
Hallo!
Wäre es möglich, mittels Subclassing einen Tab-Wechsel abzufangen?
Jein.
Es ist deshalb schwierig, weil der komplette Ribbon nur ein einziges Fenster
ist und seine Elemente nicht etwa Kindfenster.
Man kann also nur den gesamten Ribbon subclassen.
Beim Klick auf einen Tab wird aber keinesfalls irgendeine besondere Message
ausgelöst.

Die (sinnlos aufwändige) Lösung sähe so aus:
- Nach Start der App per Accessibility-API alle Elemente des Ribbons
auslesen. Das geht und erzeugt eine Ungetümliste von Hunderten
Accessibility-Elementen - auch der versteckten. (Schon gemacht.)
- Dann die Elemente durchlaufen und nach TabControls (="Registerkarte")
filtern. (Schon gemacht.)
- Die Positionen und Abmessungen der Controls z.B. in Collection abspeichern
(> accLocation). (Schon gemacht.)
- Ribbonfenster subclassen und bei MouseDown/Up-Messages die Position des
Mauscursors ermitteln und mit den in der Collection gespeicherten Elementen
vergleichen. (Noch nicht gemacht. ;-))
- Falls der Punkt in einem Tabcontrol liegt, ein Ereignis hervorrufen oder
eine Funktion in der DB anspringen.
Ziemlich aberwitzig, das Ganze.

Evtl. geht es auch allein per Accessibilty-API und einem Event-Hook. Kenne
mich damit aber nicht sonderlich aus.
Zum Thema Ribbon und Accessibilty hatte ich irgendwann schonmal diesen Link
gepostet:
http://www.moss-soft.de/public/accessibility_dll.zip

Gruß, Sascha
Sascha Trowitzsch
2010-04-15 19:50:43 UTC
Permalink
Ok, hier ist eine Quasi-Subclassing-Demo:
http://www.moss-soft.de/public/TabChangeHooker.zip
Ist doch nicht so schwierig per Accessibility/Event-Hook und benötigt kein
wirkliches Subclassing.
Trotzdem sollte man nicht im VBA-Editor rummachen, während der Hook aktiv
ist, weil das alles etwas lahm legt.

In der ACCDB das Makro HookRibbon ausführen!

Ciao, Sascha
Post by Sascha Trowitzsch
Hi,
Post by Josef Poetzl
Hallo!
Wäre es möglich, mittels Subclassing einen Tab-Wechsel abzufangen?
Jein.
Es ist deshalb schwierig, weil der komplette Ribbon nur ein einziges
Fenster ist und seine Elemente nicht etwa Kindfenster.
Man kann also nur den gesamten Ribbon subclassen.
Beim Klick auf einen Tab wird aber keinesfalls irgendeine besondere
Message ausgelöst.
- Nach Start der App per Accessibility-API alle Elemente des Ribbons
auslesen. Das geht und erzeugt eine Ungetümliste von Hunderten
Accessibility-Elementen - auch der versteckten. (Schon gemacht.)
- Dann die Elemente durchlaufen und nach TabControls
(="Registerkarte") filtern. (Schon gemacht.)
- Die Positionen und Abmessungen der Controls z.B. in Collection
abspeichern (> accLocation). (Schon gemacht.)
- Ribbonfenster subclassen und bei MouseDown/Up-Messages die Position
des Mauscursors ermitteln und mit den in der Collection gespeicherten
Elementen vergleichen. (Noch nicht gemacht. ;-))
- Falls der Punkt in einem Tabcontrol liegt, ein Ereignis hervorrufen
oder eine Funktion in der DB anspringen.
Ziemlich aberwitzig, das Ganze.
Evtl. geht es auch allein per Accessibilty-API und einem Event-Hook.
Kenne mich damit aber nicht sonderlich aus.
Zum Thema Ribbon und Accessibilty hatte ich irgendwann schonmal
http://www.moss-soft.de/public/accessibility_dll.zip
Gruß, Sascha
Gunter Avenius
2010-04-13 18:45:37 UTC
Permalink
Hallo Günther,
Post by Günther Pachschwöll
Post by Josef Poetzl
Hast du diesen Link noch?
Diesen Ansatz würde ich mir nämlich gerne ansehen.
http://translate.google.at/translate?hl=de&langpair=en|de&u=http://en.allexperts.com/q/Using-MS-Access-1440/2009/6/Access-Ribbon-Tab-Click-1.htm
Der Link (Lösung) beschreibt, wie Du ein auf ein Klick auf Standard
Register Tab reagieren kannst, wie das für ein Ribbon Tab funktioniert
wird dort nicht erklärt.

Gruß
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com

http://www.avenius.com - http://www.AccessRibbon.de
http://www.ribboncreator.de - http://www.ribboncreator2010.de
André Minhorst
2010-04-16 09:21:54 UTC
Permalink
Hallo Günther,
Post by Günther Pachschwöll
ich bin gerade dabei mein Programm mit Ribbons auszustatten
anstatt ocx Komponenten zu verwenden. Jetzt bin ich auf der Suche
nach dem Code mit dem man ein Ereignis ausführen lassen kann
wen man einen Tabwechsel durchführ. Ich habe dazu schon gegooglt,
ich dazu nur einen Ansatz gefunden der automatisch aus dem
englischen übersetzt worden ist, dabei verstehe ich leider nur Bahnhof.
Gibt es die Möglichkeit überhaupt bzw. wie kann ich das anstellen ein
Ereignis bei einem Tabwechsel auszulösen?
schau mal diesen Beitrag an:

http://www.access-im-unternehmen.de/670.0.html

Ich verwendet dort das getLabel-Callbackereignis eines beliebigen
group-Elements unterhalb des tabs, um auf den Tabwechsel zu reagieren.

Ciao
André
--
http://www.access-basics.de
Josef Poetzl
2010-04-16 12:56:12 UTC
Permalink
Hallo!
Post by André Minhorst
http://www.access-im-unternehmen.de/670.0.html
Ich verwendet dort das getLabel-Callbackereignis eines beliebigen
group-Elements unterhalb des tabs, um auf den Tabwechsel zu reagieren.
Danke für die gute Idee! :-)

An ein Callback eines Controls dachte ich anfangs auch, hatte aber
übersehen, dass man immer InvalidateControl aufrufen muss ... und dann
hilft so ein Callback nicht besonders viel, um die Tab-Wechsel zu
erkennen. ;-)

=>
Ich baute das gleich noch in meine Ribbon-Spiel-Klasse ein.

Code:
http://source.access-codelib.net/filedetails.php?repname=CodeLib&path=%2Fbranches%2Fdraft%2Fribbon%2FRibbonWatcher.cls&rev=32

Beispiel-Anwendung:
http://access-codelib.net/download/test/RibbonWatcher.zip

Statt der Ribbon-Group verwende ich einen Button, der immer
ausgeblendet wird. Damit kann ich eine Ribbon-Konfiguration so weit
manipulieren, dass die ursprünglichen Callback-Anweisungen nicht
geändert werden müssen. (Das ist hilfreich, wenn man statt Callbacks
fix vorgegebene Funktionsaufrufe (onAction="=Funktion(123)") bzw.
Labels usw. einstellen will.)


mfg
Josef
--
Code-Bibliothek für Access-Entwickler: http://access-codelib.net/
Access-FAQ von Karl Donaubauer: http://www.donkarl.com/
Günther Pachschwöll
2010-04-16 15:53:27 UTC
Permalink
Hallo NG,

Danke für die vielen Tips und Beispiele, ich werde mich
jetzt mal durch die Codes wühlen.

Günther

Loading...