Office: (Office 2003) Kontextmenü mit eigenen Befehlen

Helfe beim Thema Kontextmenü mit eigenen Befehlen in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich bräuchte mal wieder ein paar Schubser. Stehe vor meinem ersten "Kontextmenü". Ich brauche aber eines, welches bei Klick auf meinen... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Storch, 17. Mai 2012.

  1. Kontextmenü mit eigenen Befehlen


    Hallo zusammen,
    ich bräuchte mal wieder ein paar Schubser.

    Stehe vor meinem ersten "Kontextmenü". Ich brauche aber eines, welches bei Klick auf meinen Eintrag eigene Codes ausführt.

    Wie man Access-eigene Kontextmenüs über 'Symbolleiste' erstellt ist klar. Aber soweit ich erlesen konnte, kann man hier nur Accesseigene Befehle anwenden.

    Nun habe ich 2 Ideen.
    1. Listenfeld mit den Befehlen in ein Form packen, Form über XY-Koordinaten beim aufrufenden Control öffnen
    2. im Grunde wie 1., nur das Listenfeld im eigentlichen Formular unterbringen und bei Aufruf positionieren und sichtbar schalten.

    Mir gefällt Variante 2 besser, denn bei 1. hat man den Nachteil das gesamte Formularrahmen und die Titelleiste zu sehen sind. Außerdem muss man die Befehlsaktionen in das aufrufende Form zurück holen

    Vllt. hat noch jemand andere Vorschläge???

    :)
     
    Storch, 17. Mai 2012
    #1
  2. Meinst Du mit Vorschläge Ideen oder konkrete Lösungsvorschläge?

    Empfehlung: Schau Dir mal das AEK-Script "Kleine Helferlein" an.
     
    ebs17, 19. Mai 2012
    #2
  3. Hallo Eberhard,

    ich meinte Ideen. Nach Fertiglösungen zu fragen ist in den seltensten Fällen meins. Da müsste ich schon sehr verzweifelt sein.

    Ich werde mir Deine Empfehlung mal raussuchen im NEtz. Danke
     
    Storch, 19. Mai 2012
    #3
  4. Kontextmenü mit eigenen Befehlen

    Hab den Beitrag gefunden. Die Idee dort deckt sich im Ansatz mit meinem 2. Gedanken und hilft mir weiter. Nur das ich es wirklich per Rechtsklick öffnen will als Kontextmenü und nicht mit einem sichtbaren Button.

    Nochmal danke für den Hinweis und schönes Wochenende.
     
    Storch, 19. Mai 2012
    #4
  5. In der KnowHow von Klaus Oberdalhoff gibt es auch eine Lösung zu einem eigenen Kontextmenü.
     
    ebs17, 19. Mai 2012
    #5
  6. Es gibt einen Befehl Benutzerdefiniert. Diesen kannst du mit eigenen Funktionen, die in einem öffentlichen Modul stehen, hinterlegen.
    Du kannst dir also auch ohne Formular ein komplett eigenes Kontextmenü erstellen.
     
    Marsu65, 19. Mai 2012
    #6
  7. Nochmals Danke.

    @Marsu, ich hab "Benutzerdefiniert" irgendwie nicht geblickt, das ist für die Lösung.
     
    Storch, 19. Mai 2012
    #7
  8. Kontextmenü mit eigenen Befehlen

    Meine Erkenntnisse und Lösung für andere.

    Aber erstmal:
    @Marsu
    Dank Deiner Einlassung bin ich nun auch dahinter gekommen, das man neben Benutzerdefinierten Befehlen auch jeden anderen Befehl in eigene Menüleisten packen und nach eigenen Bedürfnissen modifizieren kann.
    @Eberhard
    Ich hab mich in Grundzügen an der Lösung aus dem AEK-Script orientiert

    Zielstellung:
    Ein Treeview mit 2 Ebenen, eine Root -und eine Childebene sollten mit Kontextmenü versehen werden, wobei sich die Befehlssätze für beide Ebenen unterscheiden sollen. Dazu wurden zwei benutzerdefinierte Kontextmenüs erstellt.

    Quellen:
    Erstmal die Anregungen von Eberhard und Marsu
    Prinzip folgt abgewandelt dem AEK12-Beitrag 'Kleine Helferlein' / DropDownMenüs in Formularen
    Zur Umrechnung von Twips in Pixel siehe HIER
    Zur Umrechnung und Ermittlung der aktuellen DPI-Einstellungen siehe HIER

    Problem bei der Positionierung des Kontextmenü ist, das dazu Bildschirmkoordinaten in Pixel gebraucht werden, während die x/y Koordinaten der Mouse-Ereignisse als auch die Positionierungs -und Dimensionierungsmaße für Controls in Twips angegeben werden. Das lässt sich natürlich alles berechnen, dabei sollte man immer den aktuellen DPI-Wert in die Berechnungen einbeziehen, weil die Pixelbreite in Twips von der DPI abhängig ist.

    Standardcontrols w.z.B. Text -u. Kombiboxen o. Optionsfelder haben die Eigenschaft 'Kontextmenüleiste' in der man das gewünschte Kontextmenü eintragen kann. Ein Rechtsklick in das Control öffnet das Menü dann automatisch.

    Tree -u. Listview und sicher die meisten, wenn nicht alle, anderen Active-X-Controls, bieten diese Eigenschaft nicht an. Dafür verfügen sie über die Eigenschaft 'hWnd' (nur unter VBA oder in Makros verfügbar). 'hWnd' beinhaltet einen eindeutigen Long-Wert der dem Control von Windows zugewiesen wurde. Über API-Funktionen lässt sich ermitteln, welches Fenster bzw. Treeview-Control den Fokus (den Fokus über alle geöffneten Fenster[nicht nur Access]) hat. Da das Treeview bei einem Click zuvor den Focus erhalten hat, kann über die API-Funktion 'Getfocus()' dessen Handle ermittelt werden. Dieses benutzt danach die API-Funktion 'GetWindowRect()' um die Eckdaten (Links, Oben, Rechts, Unten) des Treeviews zu ermitteln und in einer Array-Struktur zurück zu geben. Die Rückgabewerte werden in einem Object vom Type 'Rect' abgelegt.

    Bitte in den Codes auf die Kommentare achten:

    Aufgerufen wird meine Lösung bei 'Treeview_MouseDown', mein Treeview heißt 'tv_gruppen':

    Code:
    Weiter geht es mit folgender Prozedur:
    Code:
    Für die Verwendung von voran gezeigter Sub sind folgende (API)-Deklarationen notwendig. Diese müssen in einem Modul stehen.
    Code:
    Für die Ermittlung der aktuellen DPI-Einstellung sorgt dieser Code:
    Code:
    Vllt. kann der Eine oder Andere mit dieser Lösung was anfangen.

    Bei mir ist alles getestet und als 'funzt' anerkannt worden. Sollte trotzdem irgendwo ein (Tipp)Fehler sein, dann bitte ich um Info. Auch dann, wenn ich irgend etwas falsch erklärt haben sollte.
     
    Storch, 19. Mai 2012
    #8
  9. Hallo Uwe,

    da ich vor kurzem ein Kontext für´s Treeview gebraucht habe, will ich nicht verschweigen, dass es auch ohne APIs geht.
    Zwar musste ich bei mir nicht unterscheiden, ob Root oder Child, jedoch ließ sich das schnell anpassen (und kommentieren).
    Code:
    Schade, dass du nicht direkt gesagt hast, was du vorhast.
    Hätte dir vlt. ein bisken Suche und Arbeit erspart *Smilie
     
    Marsu65, 20. Mai 2012
    #9
  10. Danke für Dein Beitrag. Dein Code deckt sich doch im Grunde mit meinem aber das eigentliche Problem löst der auch nicht, nämlich, wie und wo das Kontextmenü positioniert wird. Oder übersehe ich da was. Die Positionierung war am Ende die größere Herausforderung.

    Naja und manchmal weiss man erst dann, was man vorhat, wenn man weiss, was geht. Und durch solche Arbeit lerne ich. Mich treibt ja keiner.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Storch, 20. Mai 2012
    #10
  11. Naja, ich kann das Rad ja auch nicht neu erfinden. *wink.gif*
    Man spart sich die APIs und du musst Root/ Child nicht im Nodekey haben.
    Bei mir erscheint der Kontext direkt neben dem Node bzw. Mauszeiger.

    Kannst es ja mal ausprobieren und berichten ob, bzw. welche Unterschiede zur Positionierung per API bestehen.
     
    Marsu65, 20. Mai 2012
    #11
  12. Warum eigentlich nicht??? Man wäre doch jahrelang im Gespräch *grins *grins *grins

    Das probiere ich in der Tat aus aber erst Morgen. Ich habe nirgends einen Hinweis gesehen, das das so geht. Und selbst wenn, durch meine Lösung hab ich die Menüs auf einer fixen X-Position, so dass mir die Einträge des Treeview nicht überdeckt werden. Das finde ich ganz angenehm und war auch so gewollt.

    Ich erstatte Bericht, sobald ich es getestet habe.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Storch, 20. Mai 2012
    #12
  13. Kontextmenü mit eigenen Befehlen

    Ich habs doch gleich noch getestet. Musste ja nur die Koordinaten hinter 'ShowPopup' auskommentieren.

    Es funzt tatsächlich so. Ich dachte wohl auch deswegen, das es nicht geht, weil das Treeview keine Eigenschaft Namens 'Kontextmenüleiste' hat.

    Trotzdem bleibe ich wegen der Sichtbarkeit der Einträge bei meiner Variante. Wäre höchsten nochmal interesant zu gucken ob sich die Positionierung nicht doch irgendwie ohne API realisiseren lässt.

    In wie weit machen APi-Funktionen eine Datenbankanwendung eigentlich störanfällig oder langsamer???
     
    Storch, 20. Mai 2012
    #13
  14. Danke für die Rückmeldung!
    Das heißt, dass du das Popup, unabhängig davon welcher Knoten angeklickt wurde, immer an der selben Stelle im/am Treeview anzeigen lassen möchtest?
    (Ich gehe davon aus, dass ein Knoten im TW kein eigenes Focushandle besitzt)

    Ich hätte lieber das Kontextmenü in Mausnähe. Aber das mag wie oft Geschmacks-/Gewohnheitssache sein.

    In dem Fall IMHO nicht. Irgendwie musst du ja feststellen, wo sich das Formular/Treeview gerade auf dem Bildschirm befindet, um das Popup in Relation dazu zu positionieren.
    Meiner Erfahrung nach weder noch, wenn richtig angewendet.
    Du nutzt meinem Verständnis nach, bei APIs nur den direkten /"kleinen Dienstweg", statt den "Umweg" über VBA zu gehen.

    BTW: Ich habe mir deinen Code nochmal angesehen.
    Du machst nirgendwo den angeklickten Node zum Selected Node.
    Daher dürfte eigentl. der angeklickte nicht als ausgewählt unterlegt werden.
     
    Marsu65, 20. Mai 2012
    #14
  15. Gerne, ich lerne ja auch davon*Smilie
    Nicht ganz.
    Die x-Position soll die selbe sein. Nämlich der rechte Rand des Treeview-Rahmens. Meine Intention ist die:
    wenn der Anwender sich verklickt, will er schnell den nächsten Knoten rechts klicken. folgt das Kontextmenü direkt der Maus, könnte es im schlechtesten Falle eine ganze Reihe von Knoten verdecken. der Anwender kommt an die Knoten dann vllt nicht ran mit der mAus und müsste dann erst das Kontextmenü schließen. die Positionierung auf den rechten Treeviewrand verhindert dies
    Die Y-Position folgt der Maus, also die linke obere Ecke wird auf Höhe der Mausposition angeordnet. Wie ich eben festgestellt habe, geht dies aber auch ohne Übergabe und Umrechnung der Y-Koordinate. Wenn ich bei ShowPopup den y-Parameter einfach weg lasse passiert das auch ohne meinen Umweg.

    Bedauerlich, das manches unter Access/VBA so umständlich ist. Ich hab kürzlich angefangen, mich ein wenig in VB 2010 einzuarbeiten. Da gibt es Methoden, um solche Werte direkt zu holen.

    Ich verstehe hier nicht, was Du mit 'Kleinem Dienstweg' etc meinst.

    In meinem Beispiel ging es mir ja nur um die Positionierung des Kontextmenüs. Dazu bedarf es ja nur der XY-Position der Maus.
    In meiner Anwendung hab ich das nun schon nachgerüstet, da es für die Weiterverarbeitung der Daten notwendig ist.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Storch, 20. Mai 2012
    #15
Thema:

Kontextmenü mit eigenen Befehlen

Die Seite wird geladen...
  1. Kontextmenü mit eigenen Befehlen - Similar Threads - Kontextmenü Befehlen

  2. Kontextmenü global deaktivieren

    in Microsoft Access Hilfe
    Kontextmenü global deaktivieren: Hallo, ich mal wieder Meine Vereins-DB ist für die Anwender soweit zum Test freigegeben. Ich möchte aber das Kontextmenü deaktivieren, sodaß niemand in die Entwurfansicht umschalten kann. In der...
  3. Fehlender Neuer Kommentar und Neue Notiz im Kontextmenü von Excel

    in Microsoft Excel Tutorials
    Fehlender Neuer Kommentar und Neue Notiz im Kontextmenü von Excel: Fehlender Neuer Kommentar und Neue Notiz im Kontextmenü von Excel Excel für Microsoft 365 Excel 2016 Excel 2013 Mehr... Weniger...
  4. Das Kontextmenü „E-Mail“ wird in Outlook für Mac nicht angezeigt, wenn Sie mit der ...

    in Microsoft Outlook Tutorials
    Das Kontextmenü „E-Mail“ wird in Outlook für Mac nicht angezeigt, wenn Sie mit der ...: Das Kontextmenü „E-Mail“ wird in Outlook für Mac nicht angezeigt, wenn Sie mit der Steuerungstaste darauf zugreifen möchten. 22. Juli 2019 PROBLEM Outlook für Mac bietet kein Kontextmenü, wenn...
  5. Excel 2016 rechte Mausklick kontextmenü fehlt

    in Microsoft Excel Hilfe
    Excel 2016 rechte Mausklick kontextmenü fehlt: Hallo zusmammen, bei zwei Rechnern habe ich das Problem, dass im Excel das Rechtsklick Kontextmenü (für kopieren....) fehlt. Wenn ich den Befehl Application.CommandBars("Cell").Enabled = True im...
  6. Fehlen des Eintrages Hyperlink im Kontextmenü

    in Microsoft Excel Hilfe
    Fehlen des Eintrages Hyperlink im Kontextmenü: Ein frohes Osterfest für alle! Nun zu meinem Problem. Nach einfügen eines Links zu einer anderen Datei sehe ich im Kontextmenü (rechte Maustaste) den Eintrag "Hyperlink bearbeiten" usw. nicht...
  7. Fehler im Word-Kontextmenü (Systran)

    in Microsoft Word Hilfe
    Fehler im Word-Kontextmenü (Systran): Schon lange ärgert mich, dass in meinem Kontextmenü immer Systranverweise vorhanden sind, obwohl Systran Übersetzer nicht installiert ist. Wie bekomme ich diese Verweise weg?
  8. Outlook 2010 Grafikdownload funktioniert nicht mehr

    in Microsoft Outlook Hilfe
    Outlook 2010 Grafikdownload funktioniert nicht mehr: Seit kurzer Zeit kann ich keine Grafiken mehr downloaden. Beim Rechtsklick auf die roten Markierungen öffnet sich zwar das Kontextmenü, jedoch die Option "Grafiken downloaden" ist gar nicht mehr...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden