{"id":55000638,"date":"2008-12-01T00:00:00","date_gmt":"2021-02-11T21:23:47","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=638"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Kontextmenues_von_A_bis_Z","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/","title":{"rendered":"Kontextmen&uuml;s von A bis Z"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Kontextmen&uuml;s sind die beste M&ouml;glichkeit, schnell die zum aktuell unter dem Mauszeiger befindlichen Element passenden Befehle anzuzeigen und auszuw&auml;hlen. Viele Benutzer verwenden Kontextmen&uuml;s einfach nicht, weil sie nichts mit der rechten Maustaste anzufangen wissen, und auch Entwickler lassen sie links liegen, weil sie die Chancen nicht erkennen. Wir zeigen, wie Sie wo mit dem Kontextmen&uuml; f&uuml;r perfekte Ergonomie sorgen k&ouml;nnen.<\/b><\/p>\n<p>Grunds&auml;tzlich muss man bei Kontextmen&uuml;s zwei Wege der Erstellung unterscheiden: Bis Access 2003 gibt es einen komfortablen Dialog f&uuml;r diese Aufgabe, den wir zu Beginn besprechen. Mit Access 2007 hat Microsoft jedoch das Ribbon eingef&uuml;hrt und zwar die Kontextmen&uuml;s verschont, aber die Men&uuml;- und Symbolleisten sowie den Anpassen-Dialog zum einfachen Erstellen dieser Elemente rausgeworfen (vielleicht kommt er mit der n&auml;chsten Office-Version zur&uuml;ck &#8211; wer wei&szlig;).<\/p>\n<p>Ab Access 2007 ist man somit auf alternative Methoden angewiesen, die in erster Linie auf den Einsatz von VBA hinauslaufen. Der zweite Teil dieses Beitrags besch&auml;ftigt sich mit diesem Thema. Schlie&szlig;lich gibt es einige Gelegenheiten f&uuml;r den Einsatz von Kontextmen&uuml;s, die wir im dritten Teil dieses Beitrags vorstellen.<\/p>\n<p><b>Kontextmen&uuml;s per Anpassen-Dialog<\/b><\/p>\n<p>Der <b>Anpassen<\/b>-Dialog ist die bequemste Variante zum Erstellen von Men&uuml;- und Symbolleisten und auch f&uuml;r Kontextmen&uuml;s. Dieser Dialog ist nur bis einschlie&szlig;lich Access 2003 verf&uuml;gbar und l&auml;sst sich, wie treffend, &uuml;ber den Eintrag <b>Anpassen <\/b>des Kontextmen&uuml;s der Men&uuml;- und Symbolleisten aufrufen.<\/p>\n<p><b>Neues Kontextmen&uuml; anlegen<\/b><\/p>\n<p>Ein neues Kontextmen&uuml; legen Sie ausgehend vom <b>Anpassen<\/b>-Dialog wie folgt an:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Klicken Sie auf der Registerseite <b>Symbolleisten <\/b>auf den Eintrag <b>Neu<\/b> und tragen Sie im nun erscheinenden Fenster den Namen ein, zum Beispiel <b>MeinKontextmenue<\/b> (siehe Bild 1).<\/li>\n<li class=\"aufz-hlung\">Die neue Symbolleiste sieht zun&auml;chst nicht nach Kontextmen&uuml; aus. Bevor wir das &auml;ndern, f&uuml;gen wir noch zwei oder drei Steuerelemente hinzu. Wechseln Sie im <b>Anpassen<\/b>-Dialog auf die Registerseite <b>Befehle <\/b>und ziehen Sie aus der rechten Liste den Eintrag <b>Benutzerdefiniert <\/b>entsprechend der gew&uuml;nschten Anzahl Steuerelemente in die Symbolleiste.<\/li>\n<li class=\"aufz-hlung\">Die Symbolleiste sieht nun wie in Bild 2 aus. Wechseln Sie nun zur&uuml;ck zur Registerseite <b>Symbolleisten <\/b>des <b>Anpassen<\/b>-Dialogs, stellen Sie sicher, dass der Eintrag <b>MeinKontextmenue <\/b>ausgew&auml;hlt ist, und klicken Sie auf die Schaltfl&auml;che <b>Eigenschaften<\/b>.<\/li>\n<li class=\"aufz-hlung\">Dies &ouml;ffnet den Dialog aus Bild 3. &auml;ndern Sie hier die Eigenschaft <b>Typ <\/b>auf <b>Popup<\/b>. Nachdem Sie die folgende Meldung best&auml;tigt haben, verschwindet die Symbolleiste vom Bildschirm und ist auch in der Liste der Symbolleisten im <b>Anpassen<\/b>-Dialog nicht mehr zu finden.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb001_opt.jpeg\" alt=\"abb001.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Anlegen einer neuen Symbolleiste, die einmal ein Kontextmen&uuml; werden soll<\/span><\/b><\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb004_opt.jpeg\" alt=\"abb004.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Symbolleiste mit Schaltfl&auml;chen<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb002_opt.jpeg\" alt=\"abb002.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Umwandeln der Symbolleiste in ein Kontextmen&uuml;<\/span><\/b><\/p>\n<p>Access hat das Kontextmen&uuml; in eine &uuml;bergeordnete Symbolleiste namens <b>Kontextmen&uuml;<\/b> verschoben. Wenn Sie den gleichnamigen Eintrag in der Liste der Symbolleisten aktivieren, erscheint eine lange Leiste mit dem Eintrag <b>Benutzerdefiniert<\/b>, der auch unser Kontextmen&uuml; mit den drei Beispielschaltfl&auml;chen enth&auml;lt (siehe Bild 4).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb003_opt.jpeg\" alt=\"abb003.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Ein Kontextmen&uuml; unter vielen<\/span><\/b><\/p>\n<p>Sie brauchen nun nur noch die Eigenschaften der Schaltfl&auml;chen, wie das Symbol oder die Beschriftung, einzustellen und festzulegen, welche Funktion Access beim Mausklick auf eine Schaltfl&auml;che ausl&ouml;sen soll.<\/p>\n<p>Dazu zeigen Sie wiederum das Kontextmen&uuml; der gew&uuml;nschten Schaltfl&auml;che an und w&auml;hlen den Eintrag <b>Eigenschaften <\/b>aus (siehe Bild 5). Wichtig ist hier vor allem die Eigenschaft <b>Bei Aktion<\/b>, der Sie den Namen einer VBA-Funktion mit f&uuml;hrendem Gleichheitszeichen und abschlie&szlig;endem Klammernpaar zuweisen. Diese Funktion muss in einem Standardmodul als &ouml;ffentliche Funktion deklariert sein, f&uuml;r das Beispiel aus der Abbildung also etwa so:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb005_opt.jpeg\" alt=\"abb005.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Eigenschaften einer Schaltfl&auml;che bearbeiten<\/span><\/b><\/p>\n<pre>Public Function Meldungsfenster()\r\n    MsgBox &quot;Ich wurde vom Kontextmen&uuml; &micro;\r\n    aufgerufen.&quot;\r\nEnd Function<\/pre>\n<p><b>Kontextmen&uuml; anzeigen<\/b><\/p>\n<p>Nun m&uuml;ssen wir das Kontextmen&uuml; nur noch anzeigen. Am einfachsten erledigt man dies, indem man den Namen des Kontextmen&uuml;s der Eigenschaft <b>Kontextmen&uuml;leiste<\/b> eines Formulars, Berichts oder der darin enthaltenen Steuerelemente zuweist und dann die richtige Stelle mit der rechten Maustaste anklickt. F&uuml;r den Moment wollen wir uns die Erstellung zus&auml;tzlicher Elemente sparen und dies einfach per VBA erledigen.<\/p>\n<p>Daf&uuml;r stellt Access einige Objekte und Methoden bereit. Die <b>CommandBars<\/b>-Auflistung enth&auml;lt alle Symbolleisten (zu denen auch die Kontextmen&uuml;s geh&ouml;ren) und gibt einen Verweis auf den gew&uuml;nschten Eintrag zur&uuml;ck, wenn man den Namen der Kontextmen&uuml;leiste als Index angibt (dies ginge auch &uuml;ber einen numerischen Index). Die Methode <b>ShowPopup <\/b>zeigt schlie&szlig;lich die Kontextmen&uuml;leiste an, und zwar an der Stelle des Mauszeigers (siehe Bild 6). Diese Anweisung setzen Sie im Direktfenster des VBA-Editors ab, den Sie von Access und auch vom VBA-Editor aus mit der Tastenkombination <b>Strg + G <\/b>einblenden k&ouml;nnen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb006_opt.jpeg\" alt=\"abb006.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Anzeigen eines Kontextmen&uuml;s per VBA<\/span><\/b><\/p>\n<pre>Commandbars(&quot;MeinKontextmenue&quot;).ShowPopup<\/pre>\n<p>Ein Klick auf den ersten Eintrag des Kontextmen&uuml;s liefert schlie&szlig;lich das erwartete Meldungsfenster.<\/p>\n<p><b>Eingebaute Befehle<\/b><\/p>\n<p>Wir sind im ersten Ansatz davon ausgegangen, dass man normalerweise komplett benutzerdefinierte Kontextmen&uuml;s entwirft. Dies ist nat&uuml;rlich nicht immer der Fall; manchmal m&ouml;chte man vielleicht auch einfach ein paar eingebaute Befehle, wie etwa zum Drucken oder Speichern des aktuellen Objekts, verf&uuml;gbar machen. Solche Befehle f&uuml;gen Sie genau wie die benutzerdefinierten &uuml;ber die Registerseite <b>Befehle <\/b>des <b>Anpassen<\/b>-Dialogs hinzu.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Eingebaute Symbole<\/p>\n<p>Ein wenig Farbe bringen Sie mit den zur Verf&uuml;gung stehenden Symbolen in das Kontextmen&uuml;. Mit den Kontextmen&uuml;eintr&auml;gen der Men&uuml;befehle k&ouml;nnen Sie im Anpassen-Modus die Symbole vorhandener Befehle kopieren und den benutzerdefinierten Elementen hinzuf&uuml;gen. Weiter unten erfahren Sie, wie Sie auch benutzerdefinierte Symbole zu den Schaltfl&auml;chen von Kontextmen&uuml;s hinzuf&uuml;gen k&ouml;nnen.<\/p>\n<p><b>Kontextmen&uuml;s unter Access 2007<\/b><\/p>\n<p>Nachdem Microsoft den Dialog zum Anpassen von Men&uuml;s, Symbolleisten und Kontextmen&uuml;s mit Access 2007 gestrichen hat, sind Sie dort beim Erstellen von Kontextmen&uuml;s auf einen kleinen Trick angewiesen &#8211; oder Sie verwenden direkt VBA.<\/p>\n<p>Die Geschichte mit dem Trick sieht so aus: Sie k&ouml;nnen mit bestimmten Einstellungen versehene <b>.mdb<\/b>-Datenbanken unter Access 2007 so &ouml;ffnen, dass diese ihre Men&uuml;- und Symbolleisten genau so wie unter einer &auml;lteren Access-Version anzeigen. Wir haben solch ein Exemplar als Beispieldatenbank hinzugef&uuml;gt (<b>KontextmenuesMitA2007.mdb<\/b>), das beim Start eine Men&uuml;leiste anzeigt und auch das Anzeigen des <b>Anpassen<\/b>-Dialogs per Kontextmen&uuml; zul&auml;sst (siehe Bild 7). Hiermit k&ouml;nnen Sie auch unter Access 2007 Kontextmen&uuml;s erstellen. Was aber haben Sie davon, wenn Sie diese in einer <b>.accdb<\/b>&#8211; und nicht in einer <b>.mdb<\/b>-Datei brauchen Nun, Sie k&ouml;nnen die Kontextmen&uuml;s einfach in die <b>.accdb<\/b>-Datenbank importieren.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb007_opt.jpeg\" alt=\"abb007.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Der Anpassen-Dialog ist auch unter Access 2007 noch verf&uuml;gbar.<\/span><\/b><\/p>\n<p>Dazu m&uuml;ssen Sie nur den Ribbon-Befehl <b>Externe Daten|Importieren|Access <\/b>anklicken, die Quelldatenbank (also die <b>.mdb<\/b>-Datei) ausw&auml;hlen, im Dialog <b>Objekte importieren <\/b>mit der Schaltfl&auml;che <b>Optionen <\/b>die erweiterten Optionen anzeigen und dort die Option <b>Men&uuml;s und Symbolleisten <\/b>aktivieren (siehe Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb008_opt.jpeg\" alt=\"abb008.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Importieren von Kontextmen&uuml;s aus einer .mdb-Datei in eine Access 2007-Datenbank<\/span><\/b><\/p>\n<p>Mit der oben vorgestellten <b>ShowPopup<\/b>-Methode k&ouml;nnen Sie nun schnell pr&uuml;fen, ob die mit dem <b>Anpassen<\/b>-Dialog zusammengestellten Kontextmen&uuml;s erfolgreich importiert wurden.<\/p>\n<p><b>Kontextmen&uuml;s von &auml;lteren Access-Versionen importieren<\/b><\/p>\n<p>Wenn Sie noch eine &auml;ltere Version von Access verwenden und Kontextmen&uuml;s in Access 2007 ben&ouml;tigen, k&ouml;nnen Sie diese auf die gleiche Art und Weise importieren.<\/p>\n<p><b>Kontextmen&uuml;s per VBA erstellen<\/b><\/p>\n<p>Am effizientesten und am flexibelsten ist die Erstellung der Kontextmen&uuml;s per VBA. Das liegt auch daran, dass wir eine Menge n&uuml;tzlicher Funktionen zusammengetragen haben, die etwa das codegesteuerte Hinzuf&uuml;gen benutzerdefinierter Images erlauben. VBA bietet aber auch viel mehr M&ouml;glichkeiten: So k&ouml;nnen Sie damit beispielsweise zur Laufzeit Eintr&auml;ge zu Kontextmen&uuml;s hinzuf&uuml;gen, um diese etwa in Abh&auml;ngigkeit von den in den Tabellen der Datenbank enthaltenen Daten zu f&uuml;llen &#8211; aber sehen Sie doch einfach selbst.<\/p>\n<p><b>Die CommandBars-Auflistung<\/b><\/p>\n<p>Die <b>CommandBars<\/b>-Auflistung gibt es in zwei Ausf&uuml;hrungen: erstens im <b>Application<\/b>-Objekt von Access und zweitens in der Office-Bibliothek, die Sie aber nur ben&ouml;tigen, wenn Sie mit den darunter liegenden Elementen arbeiten m&ouml;chten &#8211; und das ist im Folgenden der Fall, weshalb Sie zun&auml;chst einen Verweis auf die Bibliothek <b>Microsoft Office xx.0 Object Library <\/b>anlegen.<\/p>\n<p>Als Erstes geben wir die komplette Liste der Kontextmen&uuml;s der Anwendung aus, was prinzipiell dem Ausgeben aller <b>CommandBars<\/b>-Eintr&auml;ge entspricht, sich aber auf solche Elemente beschr&auml;nkt, deren Eigenschaft <b>Type <\/b>den Wert <b>2 <\/b>f&uuml;r <b>msoBarTypePopup <\/b>aufweist:<\/p>\n<pre>Public Sub KontextmenuesAusgeben()\r\nDim cbr As CommandBar\r\nFor Each cbr In CommandBars\r\n If cbr.Type = 2 Then\r\n    Debug.Print cbr.Name\r\nEnd If\r\nNext cbr\r\nEnd Sub<\/pre>\n<p><b>Steuerelemente in Kontextmen&uuml;s<\/b><\/p>\n<p>Die in Kontextmen&uuml;s enthaltenen Steuerelemente erhalten Sie &uuml;ber die <b>Controls<\/b>-Auflistung eines <b>Commandbar<\/b>-Elements.<\/p>\n<p><!--30percent--><\/p>\n<p>Die folgende angepasste Version der obigen Routine gibt nur Kontextmen&uuml;s inklusive der Beschriftungen und Typen der enthaltenen Steuerelemente aus &#8211; zur besseren &Uuml;bersicht um zwei Leerzeichen einger&uuml;ckt:<\/p>\n<pre>Public Sub KontextmenuesAusgeben()\r\nDim cbr As CommandBar\r\nDim cbc As CommandBarControl\r\nFor Each cbr In CommandBars\r\nIf cbr.Type = 2 Then\r\nDebug.Print cbr.Name\r\nFor Each cbc In cbr.Controls\r\n Debug.Print , cbc.Caption\r\nNext cbc\r\nEnd If\r\nNext cbr\r\nEnd Sub<\/pre>\n<p>Die Ausgabe f&uuml;r unser kleines von Hand erstelltes Kontextmen&uuml; sieht damit etwa so aus: <\/p>\n<pre>MeinKontextmenue\r\nMeldungsfenster zeigen\r\nBenutzerdefiniert\r\nBenutzerdefiniert<\/pre>\n<p>Auskunft &uuml;ber den jeweiligen Steuerelementtyp gibt die <b>Type<\/b>-Eigenschaft, die ihre Werte aus der Enumeration <b>MsoControlType <\/b>bezieht. Im Wesentlichen d&uuml;rften Sie hier auf die folgenden beiden Elemente treffen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>1 <\/b>(<b>msoControlButton<\/b>): einfache Schaltfl&auml;che<\/li>\n<li class=\"aufz-hlung\"><b>10<\/b> (<b>msoControlPopup<\/b>): Untermen&uuml; mit weiteren Untermen&uuml;s oder Schaltfl&auml;chen<\/li>\n<\/ul>\n<p><b>Kontextmen&uuml; hinzuf&uuml;gen<\/b><\/p>\n<p>Ein Kontextmen&uuml; f&uuml;gen Sie mit wenigen Codezeilen zur Liste der vorhandenen <b>Commandbars <\/b>hinzu. Die Hauptarbeit &uuml;bernimmt die <b>Add<\/b>-Methode der <b>CommandBars<\/b>-Auflistung, die unter anderem den Namen der neuen Kontextmen&uuml;leiste erwartet.<\/p>\n<p>Dass Sie eine Kontextmen&uuml;leiste und keine Men&uuml;- oder Symbolleiste anlegen m&ouml;chten, teilen Sie nicht etwa &uuml;ber die <b>Type<\/b>-Eigenschaft des <b>CommandBar<\/b>-Objekts, sondern &uuml;ber den zweiten Parameter der <b>Add<\/b>-Methode mit. Dieser hei&szlig;t <b>Position <\/b>und erh&auml;lt den Wert <b>msoBarPopup<\/b>. Die folgende Routine weist das neue Kontextmen&uuml; der Objektvariablen <b>cbr <\/b>zu, damit man gegebenenfalls weitere Eigenschaften anpassen kann:<\/p>\n<pre>Public Sub KontextmenueHinzufuegen()\r\nDim cbr As CommandBar\r\nSet cbr = CommandBars.Add(&quot;Neues Kontext&micro;\r\nmen&uuml;&quot;, msoBarPopup)\r\nWith cbr\r\n&apos;... weitere Anpassungen\r\nEnd With\r\nEnd Sub<\/pre>\n<p>Wenn beim Anlegen schon ein Kontextmen&uuml; gleichen Namens vorhanden ist, l&ouml;st die <b>Add<\/b>-Methode einen Fehler aus. Wenn Sie h&auml;ufiger &auml;nderungen an der Definition des Kontextmen&uuml;s vornehmen, k&ouml;nnen Sie dieses mit der folgenden Anweisung zun&auml;chst l&ouml;schen und im Anschluss neu erstellen:<\/p>\n<pre>CommandBars(&quot;Neues Kontextmen&uuml;&quot;).Delete<\/pre>\n<p>Da auch dies einen Fehler ausl&ouml;st, wenn das zu l&ouml;schende Kontextmen&uuml; gar nicht existiert, schalten Sie die Fehlerbehandlung vor&uuml;bergehend aus:<\/p>\n<pre>On Error Resume Next\r\nCommandBars(&quot;Neues Kontextmen&uuml;&quot;).Delete\r\nOn Error GoTo 0<\/pre>\n<p><b>Steuerelemente hinzuf&uuml;gen<\/b><\/p>\n<p>Das <b>CommandBar<\/b>-Objekt enth&auml;lt eine <b>Controls<\/b>-Auflistung, der Sie Steuerelemente hinzuf&uuml;gen k&ouml;nnen. Dies geschieht ganz einfach &uuml;ber die <b>Add<\/b>-Methode der <b>Controls<\/b>-Auflistung, wie folgendes Beispiel zeigt:<\/p>\n<pre>Public Sub KontextmenueHinzufuegen()\r\nDim cbr As CommandBar\r\nDim cbb As CommandBarButton\r\nOn Error Resume Next\r\nCommandBars(&quot;Neues Kontextmen&uuml;&quot;).Delete\r\nOn Error GoTo 0\r\nSet cbr = CommandBars.Add(&quot;Neues Kontextmen&uuml;&quot;, msoBarPopup)\r\nWith cbr\r\nSet cbb = cbr.Controls.Add(msoControlButton)\r\nWith cbb\r\n.Caption = &quot;Beispielbefehl&quot;\r\n.OnAction = &quot;Beispielfunktion&quot;\r\nEnd With\r\nEnd With\r\nEnd Sub<\/pre>\n<p>Genau das Kontextmen&uuml; selbst weist in der Routine die neue Schaltfl&auml;che einer Objektvariablen zu, die diesmal den Typ <b>CommandBarButton <\/b>hat.<\/p>\n<p>Auf diese Weise k&ouml;nnen Sie anschlie&szlig;end leicht weitere Eigenschaften wie die Beschriftung angeben oder die VBA-Routine, die ein Klick auf die Schaltfl&auml;che ausl&ouml;sen soll.<\/p>\n<p><b>Weitere Eigenschaften von <\/b><\/p>\n<pre>CommandBarButton-Elementen<\/pre>\n<p>Das oben verwendete <b>CommandBarButton<\/b>-Element k&ouml;nnen Sie mit den folgenden Eigenschaften Ihren Bed&uuml;rfnissen anpassen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>BeginGroup<\/b>: Falls <b>True<\/b>, zeigt das Kontextmen&uuml; einen Trennstrich vor diesem Steuerelement an<\/li>\n<li class=\"aufz-hlung\"><b>Enabled<\/b>: Aktiviert und deaktiviert einen Kontextmen&uuml;eintrag<\/li>\n<li class=\"aufz-hlung\"><b>FaceID<\/b>: Erlaubt die Angabe der ID eines der eingebauten Symbole<\/li>\n<li class=\"aufz-hlung\"><b>Picture<\/b>: Erwartet ein <b>StdPicture<\/b>-Objekt, welches das Steuerelement als Symbol verwenden soll<\/li>\n<li class=\"aufz-hlung\"><b>Mask<\/b>: Erwartet ein StdPicture-Objekt, welches transparente Bereiche des unter Picture angegebenen Symbols kennzeichnet. Die Maske enth&auml;lt dabei lediglich schwarze (nicht transparent) und wei&szlig;e (transparent) Bereiche.<\/li>\n<li class=\"aufz-hlung\"><b>Visible<\/b>: Blendet ein Steuerelement ein oder aus<\/li>\n<\/ul>\n<p><b>Eingebaute Steuerelemente<\/b><\/p>\n<p>Sie k&ouml;nnen auch eingebaute Elemente der Men&uuml;s der Office-Anwendungen in benutzerdefinierte Kontextmen&uuml;s integrieren. Dazu geben Sie die <b>ID <\/b>des gew&uuml;nschten Elements direkt beim Hinzuf&uuml;gen des Eintrags an. Im folgenden Beispiel wird das Element mit der <b>ID 3 <\/b>hinzugef&uuml;gt, was dem <b>Speichern<\/b>-Befehl entspricht:<\/p>\n<pre>Set cbb = cbr.Controls.Add(msoControlButton, 3)<\/pre>\n<p>Beachten Sie, dass Sie die <b>ID <\/b>nur als Parameter der <b>Add<\/b>-Methode, nicht aber nach dem Erstellen &uuml;ber eine Eigenschaft zuweisen k&ouml;nnen.<\/p>\n<p>Die Routine aus Listing 1 gibt ein langes Kontextmen&uuml; mit allen IDs aus.<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Kontextmen&uuml; mit Bild<\/p>\n<pre>Public Sub ControlIDsAusgeben()\r\nDim cbr As CommandBar\r\nDim cbb As CommandBarButton\r\nDim i As Integer\r\nOn Error Resume Next\r\nCommandBars(&quot;Neues Kontextmen&uuml;&quot;).Delete\r\nOn Error GoTo 0\r\nSet cbr = CommandBars.Add(&quot;Neues Kontextmen&uuml;&quot;, msoBarPopup)\r\nWith cbr\r\nFor i = 1 To 1000\r\n On Error Resume Next\r\n    Set cbb = cbr.Controls.Add(msoControlButton, i)\r\n    If Err.Number = 0 Then\r\n        cbb.Caption = cbb.Caption &amp; &quot; (&quot; &amp; i &amp; &quot;)&quot;\r\n    End If\r\n    On Error GoTo 0\r\nNext i\r\nEnd With\r\ncbr.ShowPopup\r\nEnd Sub<\/pre>\n<p><b>Benutzerdefinierte Symbole in Kontextmen&uuml;s<\/b><\/p>\n<p>Per VBA k&ouml;nnen Sie den Eintr&auml;gen von Kontextmen&uuml;s auch benutzerdefinierte Symbole zuweisen. Dies bringt in der Regel ein kleines Problem mit sich: Kontextmen&uuml;s unterst&uuml;tzen keine transparenten Bildformate, sondern verlangen nach einer speziellen Vorgehensweise zum Einbringen von Transparenz.<\/p>\n<p>Ein einfaches Bild ohne Transparenz f&uuml;gen Sie einfach &uuml;ber die <b>Picture<\/b>-Eigenschaft des jeweiligen Steuerelements hinzu. Diese Eigenschaft erwartet einen Verweis auf ein Bild des Datentyps <b>StdPicture<\/b>, das Sie auf Basis einer im gleichen Verzeichnis wie die Datenbank gespeicherten Bilddatei mit der <b>LoadPicture<\/b>-Methode hinzuf&uuml;gen k&ouml;nnen. Der notwendige Code sieht ungef&auml;hr so wie in Listing 2 aus.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Kontextmen&uuml; mit Bild<\/p>\n<pre>Public Sub KontextmenueMitImage()\r\nDim cbr As CommandBar\r\nDim cbb As CommandBarButton\r\nDim strPic As String\r\nDim objPic As StdPicture\r\nOn Error Resume Next\r\nCommandBars(&quot;Kontextmen&uuml; mit Icons&quot;).Delete\r\nOn Error GoTo 0\r\nSet cbr = CommandBars.Add(&quot;Kontextmen&uuml; mit Icons&quot;, msoBarPopup)\r\nWith cbr\r\nSet cbb = cbr.Controls.Add(msoControlButton)\r\nWith cbb\r\n.Caption = &quot;Icon mit Herz&quot;\r\n.Picture = stdole.LoadPicture(CurrentProject.Path &amp; &quot;\\heart.bmp&quot;)\r\nEnd With\r\nEnd With\r\ncbr.ShowPopup\r\nEnd Sub<\/pre>\n<p>Dieses Beispiel funktioniert leider nur mit wenigen Bildformaten und bringt den erwarteten ausgef&uuml;llten statt transparenten Hintergrund (siehe Bild 9). Die Transparenz erreichen Sie durch das Hinzuf&uuml;gen einer sogenannten Maske. Diese sieht prinzipiell genau so wie das anzuzeigende Bild aus, nur dass sie alle transparenten Bereiche wei&szlig; und alle nicht transparenten Bereiche schwarz darstellt. F&uuml;r unser im obigen Beispiel verwendetes Herz sieht das so wie in Bild 10 aus. Durch Hinzuf&uuml;gen der folgenden kleinen Zeile &auml;ndern Sie die Darstellung, die dann wie in Bild 11 erscheint:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb009_opt.jpeg\" alt=\"abb009.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Ein Men&uuml;element mit benutzerdefiniertem Icon<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb010_opt.jpeg\" alt=\"abb010.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Die Maske rechts l&auml;sst das Herz links im Kontextmen&uuml; transparent erscheinen.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb011_opt.jpeg\" alt=\"abb011.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Perfekte Transparenz dank Maske<\/span><\/b><\/p>\n<pre>.Mask = stdole.LoadPicture(CurrentProject.Path &amp; &quot;\\mask.bmp&quot;)<\/pre>\n<p>Nun ist das Anlegen einer Maske f&uuml;r jedes in einem Kontextmen&uuml; erscheinende Bild eine Menge Arbeit, und auch die Einschr&auml;nkung der &uuml;ber die Methode <b>LoadImage <\/b>verf&uuml;gbaren Bildtypen schreit nach einer alternativen Vorgehensweise.<\/p>\n<p>Unser GDI-Spezialist Sascha Trowitzsch bietet dazu eine Funktion namens <b>LoadPicturePlus <\/b>an, die im Gegensatz zur <b>LoadPicture<\/b>-Methode alle g&auml;ngigen Bildtypen zul&auml;sst.<\/p>\n<p>Leider werden die Bilder auch so nicht automatisch transparent dargestellt.<\/p>\n<p>Allerdings gibt es noch eine weitere Routine namens <b>MaskFromPicture<\/b>, die aus einer herk&ouml;mmlichen Bilddatei die gew&uuml;nschte Maske zaubert. Die beiden Funktionen finden Sie im Modul <b>mdlGDIPlus<\/b> der Beispieldatenbank.<\/p>\n<p>Die Routine aus Listing 3 liest ein Bild aus dem Dateisystem ein, weist dieses der Men&uuml;schaltfl&auml;che als <b>Picture <\/b>zu, erzeugt daraus die Maske und weist diese der Eigenschaft <b>Mask <\/b>hinzu.<\/p>\n<p class=\"kastentabelleheader\">Listing 4: Dynamische Kontextmen&uuml;s anzeigen<\/p>\n<pre>Private Sub ArtikelKontextmenue()\r\n    Dim cbr As CommandBar\r\n    Dim cbb As CommandBarButton\r\n    On Error Resume Next\r\n    CommandBars(&quot;ArtikelDynamisch&quot;).Delete\r\n    On Error GoTo 0\r\n    Set cbr = CommandBars.Add(&quot;ArtikelDynamisch&quot;, msoBarPopup)\r\n    With cbr\r\n    Set cbb = cbr.Controls.Add(msoControlButton)\r\n    With cbb\r\n    .Picture = LoadPicturePlus(CurrentProject.Path &amp; &quot;\\delete.png&quot;)\r\n    .Mask = MaskFromPicture(.Picture)\r\n    .Caption = &quot;Artikel &apos;&quot; &amp; Me!Artikelname &amp; &quot;&apos; l&ouml;schen&quot;\r\n    .OnAction = &quot;=mnuArtikelLoeschenDynamisch(&quot; &amp; Me!ArtikelID &amp; &quot;)&quot;\r\n    End With\r\n    Set cbb = cbr.Controls.Add(msoControlButton)\r\n    With cbb\r\n    .Picture = LoadPicturePlus(CurrentProject.Path &amp; &quot;\\edit.png&quot;)\r\n    .Mask = MaskFromPicture(.Picture)\r\n    .Caption = &quot;Artikel &apos;&quot; &amp; Me!Artikelname &amp; &quot;&apos; bearbeiten&quot;\r\n    .OnAction = &quot;=mnuArtikelBearbeitenDynamisch(&quot; &amp; Me!ArtikelID &amp; &quot;)&quot;\r\n    End With\r\n    End With\r\n    cbr.ShowPopup\r\n    End Sub<\/pre>\n<p><b>Einsatzm&ouml;glichkeiten f&uuml;r Kontextmen&uuml;s<\/b><\/p>\n<p>Kontextmen&uuml;s k&ouml;nnen prinzipiell &uuml;berall erscheinen, wo der Benutzer mit der rechten Maustaste hinklickt. Die Schwierigkeit ist nur, den richtigen Kontext zu ermitteln. In den folgenden Abschnitten zeigen wir einige M&ouml;glichkeiten f&uuml;r die Anzeige von Kontextmen&uuml;s.<\/p>\n<p><b>Kontextmen&uuml;s in Formularen<\/b><\/p>\n<p>Die einfachste Variante ist das Zuweisen eines Kontextmen&uuml;s zur Eigenschaft <b>Kontextmen&uuml;leiste <\/b>eines Formulars. Das Kontextmen&uuml; erscheint dann bei Klicks auf den kompletten Formularbereich mit Ausnahme der Leiste am unteren Rand und mit Ausnahme von Unterformularen.<\/p>\n<p>Auch das Anklicken von Steuerelementen zeigt das Formular-Kontextmen&uuml; an &#8211; zumindest solange das Steuerelement kein eigenes Kontextmen&uuml; besitzt: Die meisten Steuerelemente enthalten n&auml;mlich selbst eine Eigenschaft namens <b>Kontextmen&uuml;leiste<\/b>.<\/p>\n<p>Die Eigenschaft <b>Kontextmen&uuml; <\/b>mit den m&ouml;glichen Werten <b>Ja <\/b>und <b>Nein <\/b>ist den Formularen (und Berichten) vorbehalten. Stellen Sie diese Eigenschaft auf <b>Nein<\/b> ein, zeigt das Formular beim Rechtsklick gar keine Kontextmen&uuml;s an &#8211; au&szlig;er in Unterformularen (und Unterberichten).<\/p>\n<p><b>Datenabh&auml;ngige Kontextmen&uuml;befehle<\/b><\/p>\n<p>Interessant sind Kontextmen&uuml;befehle zum Beispiel in Zusammenhang mit Datensatzoperationen. Schnell mal eben die Details zu einem Eintrag in der Datenblattansicht anzeigen oder einen Datensatz l&ouml;schen Kein Problem! Allerdings gibt es verschiedene M&ouml;glichkeiten, dies zu erledigen.<\/p>\n<p>Als Beispiel dient das Formular <b>frmArtikel<\/b>, das die Eintr&auml;ge der Tabelle <b>tblArtikel <\/b>anzeigt.<\/p>\n<p>Es soll ein Kontextmen&uuml; erhalten, das die beiden Befehle aus Bild 12 anzeigt und die entsprechenden Aktionen ausf&uuml;hrt (im Beispiel reicht uns jedoch die Anzeige einfacher Meldungsfenster mit entsprechenden Texten). Die beiden Men&uuml;eintr&auml;ge rufen die Funktionen <b>mnuArtikelLoeschen <\/b>und <b>mnuArtikelBearbeiten <\/b>auf. Dieses Kontextmen&uuml; definiert man einmal und braucht sich dann nicht mehr darum zu k&uuml;mmern, weil sowohl das Aussehen als auch die aufgerufenen Funktionen gleich bleiben.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb012_opt.jpeg\" alt=\"abb012.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Ein Kontextmen&uuml; in der Datenblattansicht<\/span><\/b><\/p>\n<p>Wie wissen die aufgerufenen Funktionen nun, welchen Datensatz sie &uuml;berhaupt l&ouml;schen oder anzeigen sollen Dazu verwenden Sie weitere Funktionen, die etwa einen Verweis auf das aktuelle Formular liefern:<\/p>\n<pre>Public Function mnuArtikelLoeschen()\r\nMsgBox &quot;Artikel &apos;&quot; &amp; Screen.ActiveForm!ArtikelID &amp; &quot;&apos; l&ouml;schen&quot;\r\nEnd Function<\/pre>\n<p>Statt des Meldungsfensters k&ouml;nnten Sie hier etwa eine <b>DELETE<\/b>-Anweisung platzieren, die den aktuellen Datensatz l&ouml;scht und die Anzeige aktualisiert.<\/p>\n<p>Der Verweis mit <b>Screen.ActiveForm <\/b>funktioniert allerdings nur, wenn das Formular nicht als Unterformular verwendet wird. Ist das der Fall, m&uuml;ssen Sie sich mit folgendem Ausdruck auf das Formular beziehen:<\/p>\n<pre>Screen.ActiveForm!frmArtikel.Form<\/pre>\n<p><b>Daten in Kontextmen&uuml;eintrag einbeziehen<\/b><\/p>\n<p>Die Abfrage des zu l&ouml;schenden oder anzuzeigenden Datensatzes kann man nat&uuml;rlich auch direkt in das Kontextmen&uuml; einbauen.<\/p>\n<p>W&auml;hrend Sie das Kontextmen&uuml; im vorigen Beispiel einmalig einrichten, m&uuml;ssen Sie das datenabh&auml;ngige Kontextmen&uuml; jeweils beim Klick auf die rechte Maustaste erstellen.<\/p>\n<p>Das Wichtigste hierbei ist die grunds&auml;tzlich andere Vorgehensweise zum Anzeigen des Kontextmen&uuml;s. Im vorherigen Beispiel war die Men&uuml;leiste bereits vorhanden und f&uuml;r die Eigenschaft <b>Kontextmen&uuml;leiste <\/b>angegeben, was zum automatischen Anzeigen beim Rechtsklick f&uuml;hrt.<\/p>\n<p>Nun sollen aber zumindest die <b>Caption<\/b> und die <b>OnAction<\/b>-Eigenschaft in Abh&auml;ngigkeit vom Datensatz erstellt werden, auf dem der Benutzer den Rechtsklick ausf&uuml;hrt.<\/p>\n<p>Dies geht nat&uuml;rlich nicht, wenn das Kontextmen&uuml; schon vorhanden ist. Wie aber soll man das Kontextmen&uuml; beim Rechtsklick neu bauen Indem man einfach die Ereignisse des Formulars und seiner Steuerelemente ausnutzt, in diesem Fall <b>Bei Maustaste<\/b>.<\/p>\n<p>Dieses Ereignis feuert immer, wenn man die Maustaste herunterdr&uuml;ckt und dann losl&auml;sst. Sie werden schnell feststellen, dass das entsprechende Ereignis des Formulars oder auch des Detailbereichs Ihnen nicht weiterhilft, denn ein Klick auf ein Steuerelement (und daraus besteht ein Datensatz in der Datenblattansicht im Wesentlichen) schl&auml;gt nicht bis zum darunter liegenden Formular durch.<\/p>\n<p>Stattdessen verwenden Sie einfach die <b>Bei Maustaste auf<\/b>-Ereignisprozedur der Steuerelemente im Detailbereich:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Markieren Sie das Textfeld.<\/li>\n<li class=\"aufz-hlung\">W&auml;hlen Sie f&uuml;r die Eigenschaft <b>Bei Maustaste auf <\/b>den Eintrag <b>[Ereignisprozedur] <\/b>aus und klicken Sie auf die Schaltfl&auml;che mit den drei Punkten (siehe Bild 13).<\/li>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb013_opt.jpeg\" alt=\"abb013.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Anlegen der Ereigniseigenschaft f&uuml;r den Rechtsklick auf das Textfeld<\/span><\/b><\/p>\n<li class=\"aufz-hlung\">Erg&auml;nzen Sie den Prozedurrumpf im VBA-Editor wie folgt:<\/li>\n<\/ul>\n<p class=\"quellcodefliesstext-miteinzug\">Private Sub Artikelname_MouseUp(Button As _<\/p>\n<pre>Integer, Shift As Integer, _\r\nX As Single, Y As Single)<\/pre>\n<p class=\"quellcodefliesstext-miteinzug\"> If Button = 2 Then<\/p>\n<p class=\"quellcodefliesstext-miteinzug\"> ArtikelKontextmenue<\/p>\n<p class=\"quellcodefliesstext-miteinzug\"> End If<\/p>\n<p class=\"quellcodefliesstext-miteinzug\">End Sub<\/p>\n<p>Die in dieser Routine aufgerufene Funktion <b>ArtikelKontextmenue <\/b>erledigt die eigentliche Aufgabe &#8211; dies aber nur, wenn der Parameter <b>Button <\/b>der Ereignisprozedur den Wert <b>2 <\/b>aufweist, was bedeutet, dass der Benutzer die rechte Taste verwendet hat.<\/p>\n<p><b>Kontextmen&uuml; dynamisch anlegen<\/b><\/p>\n<p>In der Routine wird zun&auml;chst die bestehende Kontextmen&uuml;leiste namens <b>ArtikelDynamisch <\/b>gel&ouml;scht und neu angelegt. Die Routine sieht wie in Listing 4 aus und l&ouml;scht zun&auml;chst ein eventuell vorhandenes Kontextmen&uuml; mit dem Namen <b>ArtikelDynamisch<\/b>.<\/p>\n<p>Dann legt es dieses neu an und f&uuml;gt die beiden Eintr&auml;ge hinzu, wobei es direkt den Artikelnamen in die <b>Caption <\/b>des Eintrags und die <b>ArtikelID <\/b>in den Aufruf der f&uuml;r <b>OnAction <\/b>angegebenen Funktion einf&uuml;gt.<\/p>\n<p>Schlie&szlig;lich sorgt die <b>ShowPopup<\/b>-Methode f&uuml;r die Anzeige des Kontextmen&uuml;s.<\/p>\n<p>In den f&uuml;r die Eigenschaft <b>OnAction <\/b>angegebenen Funktionen m&uuml;ssen Sie nat&uuml;rlich auch noch die entsprechenden Parameter einbauen, was wie folgt aussieht:<\/p>\n<pre>Public Function mnuArtikelLoeschenDynamisch( _\r\nlngArtikelID As Long)\r\nMsgBox &quot;Artikel &apos;&quot; &amp; lngArtikelID _\r\n&amp; &quot;&apos; l&ouml;schen&quot;\r\nEnd Function\r\nPublic Function mnuArtikelBearbeitenDynamisch( _\r\nlngArtikelID As Long)\r\nMsgBox &quot;Artikel &apos;&quot; &amp; lngArtikelID _\r\n&amp; &quot;&apos; bearbeiten&quot;\r\nEnd Function<\/pre>\n<p>Fertig! Sie brauchen nun nur noch in die Datenblattansicht zu wechseln und das Kontextmen&uuml; des soeben mit einer Ereignisprozedur best&uuml;ckten Textfelds aufzurufen und es erscheint das Kontextmen&uuml; aus Bild 14.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb014_opt.jpeg\" alt=\"abb014.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Ein datenabh&auml;ngiges Kontextmen&uuml;<\/span><\/b><\/p>\n<p><b>&Uuml;berraschung!<\/b><\/p>\n<p>Bislang herrschte die Meinung vor, dass die f&uuml;r die <b>OnAction <\/b>angegebenen Funktionen &ouml;ffentlich in einem Standardmodul deklariert werden m&uuml;ssten.<\/p>\n<p>Ein Versuch brachte anderes zutage: Wenn Sie das Kontextmen&uuml; im Kontext mit einem Formular aufrufen, k&ouml;nnen Sie die Funktion auch gleich im Klassenmodul des Formulars unterbringen.<\/p>\n<p>Dies bringt diverse Vorteile mit sich: Zun&auml;chst k&ouml;nnen Sie, da sich diese Funktion in der Formularklasse befindet, auch direkt auf seine Elemente zugreifen, also etwa ein Textfeld &uuml;ber <b>Me!Artikelname <\/b>ansprechen. Die Funktionen sehen dann etwa so aus:<\/p>\n<pre>Public Function mnuArtikelLoeschen()\r\nMsgBox &quot;Artikel &apos;&quot; _\r\n&amp; Me!ArtikelID &amp; &quot;&apos; l&ouml;schen&quot;\r\nEnd Function\r\nPublic Function mnuArtikelBearbeiten()\r\nMsgBox &quot;Artikel &apos;&quot; &amp; Me!ArtikelID &amp; &quot;&apos; bearbeiten&quot;\r\nEnd Function<\/pre>\n<p>Au&szlig;erdem haben Sie die Funktionen des Formulars kompakt in einem einzigen Modul und k&ouml;nnen dieses anderweitig verwenden, ohne noch ein Standardmodul mitschleppen zu m&uuml;ssen.<\/p>\n<p><b>Kontextmen&uuml; im Listenfeld<\/b><\/p>\n<p>Im Listenfeld k&ouml;nnen Sie das Kontextmen&uuml; fast genauso wie in der Datenblattansicht von Formularen einsetzen.<\/p>\n<p>Der Unterschied ist, dass Sie dort die Eigenschaft <b>Kontextmen&uuml;leiste <\/b>des Listenfeld-Steuerelements mit dem Namen des Kontextmen&uuml;s f&uuml;llen m&uuml;ssen &#8211; zumindest wenn Sie nur ein statisches Kontextmen&uuml; wie in Bild 15 verwenden m&ouml;chten.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Kontextmenues-web-images\/abb015_opt.jpeg\" alt=\"abb015.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Ein Kontextmen&uuml; im Listenfeld<\/span><\/b><\/p>\n<p>Auch hier besteht die M&ouml;glichkeit, das Kontextmen&uuml; erst zur Laufzeit zusammenzustellen, wobei Sie nat&uuml;rlich das Ereignis <b>Bei Maustaste auf <\/b>des Listenfeld verwenden m&uuml;ssen.<\/p>\n<p class=\"kastentabelleheader\">Listing 3: Kontextmen&uuml; mit transparentem Bild<\/p>\n<pre>Public Sub KontextmenueMitTransparentemImage()\r\n&apos;...\r\nSet cbr = CommandBars.Add(&quot;Kontextmen&uuml; mit Icons&quot;, msoBarPopup)\r\nWith cbr\r\nSet cbb = cbr.Controls.Add(msoControlButton)\r\nWith cbb\r\n.Caption = strPic\r\n.Picture = LoadPicturePlus(CurrentProject.Path &amp; &quot;\\heart.png&quot;)\r\nSet objPic = MaskFromPicture(.Picture)\r\n.Mask = objPic\r\n.Caption = &quot;Icon mit transparentem Herz&quot;\r\nEnd With\r\nEnd With\r\ncbr.ShowPopup\r\nEnd Sub<\/pre>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>windows.png<\/p>\n<p>Kontextmenues.mdb<\/p>\n<p>KontextmenuesMitA2007.mdb<\/p>\n<p>lock.png<\/p>\n<p>mail.png<\/p>\n<p>mask.bmp<\/p>\n<p>pencil.png<\/p>\n<p>soccer_ball.png<\/p>\n<p>table.png<\/p>\n<p>table_sql.png<\/p>\n<p>view.png<\/p>\n<p>window_split_hor.png<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/78A28B23-6FE2-4271-8C39-88B8BD06FA4A\/aiu_638.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kontextmen&uuml;s sind die beste M&ouml;glichkeit, schnell die zum aktuell unter dem Mauszeiger befindlichen Element passenden Befehle anzuzeigen und auszuw&auml;hlen. Viele Benutzer verwenden Kontextmen&uuml;s einfach nicht, weil sie nichts mit der rechten Maustaste anzufangen wissen, und auch Entwickler lassen sie links liegen, weil sie die Chancen nicht erkennen. Wir zeigen, wie Sie wo mit dem Kontextmen&uuml; f&uuml;r perfekte Ergonomie sorgen k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662008,66062008,44000028,44000023],"tags":[],"class_list":["post-55000638","post","type-post","status-publish","format-standard","hentry","category-662008","category-66062008","category-Ergonomie_und_Benutzeroberflaeche","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Kontextmen&uuml;s von A bis Z - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kontextmen&uuml;s von A bis Z\" \/>\n<meta property=\"og:description\" content=\"Kontextmen&uuml;s sind die beste M&ouml;glichkeit, schnell die zum aktuell unter dem Mauszeiger befindlichen Element passenden Befehle anzuzeigen und auszuw&auml;hlen. Viele Benutzer verwenden Kontextmen&uuml;s einfach nicht, weil sie nichts mit der rechten Maustaste anzufangen wissen, und auch Entwickler lassen sie links liegen, weil sie die Chancen nicht erkennen. Wir zeigen, wie Sie wo mit dem Kontextmen&uuml; f&uuml;r perfekte Ergonomie sorgen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:23:47+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"22\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Kontextmen&uuml;s von A bis Z\",\"datePublished\":\"2021-02-11T21:23:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/\"},\"wordCount\":3663,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/7ea7183802134807b533630d6fdc7c0f\",\"articleSection\":[\"2008\",\"6\\\/2008\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/\",\"name\":\"Kontextmen&uuml;s von A bis Z - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/7ea7183802134807b533630d6fdc7c0f\",\"datePublished\":\"2021-02-11T21:23:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/7ea7183802134807b533630d6fdc7c0f\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/7ea7183802134807b533630d6fdc7c0f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kontextmenues_von_A_bis_Z\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kontextmen&uuml;s von A bis Z\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kontextmen&uuml;s von A bis Z - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/","og_locale":"de_DE","og_type":"article","og_title":"Kontextmen&uuml;s von A bis Z","og_description":"Kontextmen&uuml;s sind die beste M&ouml;glichkeit, schnell die zum aktuell unter dem Mauszeiger befindlichen Element passenden Befehle anzuzeigen und auszuw&auml;hlen. Viele Benutzer verwenden Kontextmen&uuml;s einfach nicht, weil sie nichts mit der rechten Maustaste anzufangen wissen, und auch Entwickler lassen sie links liegen, weil sie die Chancen nicht erkennen. Wir zeigen, wie Sie wo mit dem Kontextmen&uuml; f&uuml;r perfekte Ergonomie sorgen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:23:47+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"22\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Kontextmen&uuml;s von A bis Z","datePublished":"2021-02-11T21:23:47+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/"},"wordCount":3663,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f","articleSection":["2008","6\/2008","Ergonomie und Benutzeroberfl\u00e4che","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/","url":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/","name":"Kontextmen&uuml;s von A bis Z - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f","datePublished":"2021-02-11T21:23:47+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/7ea7183802134807b533630d6fdc7c0f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Kontextmenues_von_A_bis_Z\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Kontextmen&uuml;s von A bis Z"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000638"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000638\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}