Seite 1 von 1

Menue Punkt direkt anspringen ? [erledigt]

Verfasst: Mo, 23. Okt 2017 17:18
von AUGE_OHR
hi,

ich bin der Meinung das dass geht aber finde es nicht ...
ich möchte, per Code, einen Menue Punkt aktivieren aber weiss z.Z. nicht wie :?

Re: Menue Punkt direkt anspringen ?

Verfasst: Mo, 23. Okt 2017 17:56
von Herbert

Re: Menue Punkt direkt anspringen ?

Verfasst: Mo, 23. Okt 2017 18:58
von AUGE_OHR
Herbert hat geschrieben: Mo, 23. Okt 2017 17:56 Du meinst so was....
viewtopic.php?f=31&t=8300&p=92993&hilit ... den#p92963
es wird zwar alles mögliche vom Menu besprochen aber der Punkt "anspringen" fehlt mir.
was ich suche ist so was wie :

Code: Alles auswählen

// Dummy Code funktioniert NICHT "so"
   KEYBOARD CHR(xbeK_ALT)
   FOR n := 1 TO j
      KEYBOARD CHR(xbeK_RIGHT)
   NEXT
und auch mit

Code: Alles auswählen

keybd_event( VK_MENU, 0, 0, 0 )
keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 )

keybd_event( VK_RIGHT)
komme ich nicht an das Ziel.

---

mit o:childFromName() bekomme ich zwar das Object ( mit dem Codeblock zum ausführen ) zurück aber ich möchte "nur" den Cursor im Menu platzieren wo die Aktion ausgelöst werden soll

Re: Menue Punkt direkt anspringen ?

Verfasst: Mo, 23. Okt 2017 19:54
von AUGE_OHR
hm ... könnte es sein das die keybd_event API Function nicht mehr unter Windows 10 läuft :shock:
Note This function has been superseded. Use SendInput instead.

Re: Menue Punkt direkt anspringen ?

Verfasst: Do, 26. Okt 2017 2:02
von AUGE_OHR
also ... es gibt verschiedene Situationen

1.) SDI GUI mit Menu wobei die horizontalen Items ein Shortcut ( ~ ) haben.

2.) MDI Client Fenster können kein Menu haben !
Das Menu ist im Main Fenster d.h. alle MDI Childs können es erreichen/anfordern

2a.) GUI : wenn man es, wie unter 1.), an die o:DrawingArea des Main Dialog schickt kein Problem.
2b.) Hybrid : im CRT Fenster muss man zuerst ALT drücken und dann den Buchstaben des Hotkey

btw. im Crt Fenster muss o:useShortCuts := .T. gesetzt sein damit die Menu Tasten "wirken"

zu 1.) das ist einfach : Beispiel "~Hilfe"

Code: Alles auswählen

   PostAppEvent(xbeP_Keyboard, xbeK_ALT_H,, SP_Main():DrawingArea )
also eine Konstante xbeK_ALT_* an die o:DrawingArea des Main Dialog

zu 2b.) das geht nun nicht mit mehreren PostAppEvent() man muss es in den Keyboard Puffer schieben

Code: Alles auswählen

   keybd_event( VK_MENU, 0, 0, 0 )
   keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 )

   keybd_event( VK_RETURN, 0, 0, 0 )
   keybd_event( VK_RETURN, 0, KEYEVENTF_KEYUP, 0 )

   FOR n := 1 TO nCol - 1
      keybd_event( VK_RIGHT, 0, 0, 0 )
      keybd_event( VK_RIGHT, 0, KEYEVENTF_KEYUP, 0 )
   NEXT
dies Beispiel verwendet VK_RIGHT zum positionieren.
die keybd_event API Function läuft übrigens (noch) unter Windows 10 16299.19

zur Verwendung in einer Hybrid Anwendung sei zu bemerken das der Code im Crt Fenster NICHT auf das Menu "wartet".