ComboBox BUG mit Hotkey ?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

ComboBox BUG mit Hotkey ?

Beitrag von AUGE_OHR »

ich habe eine XbpCombox().
mit F4 kann man eine ComboBox "öffnen" d.h. der Listbox Bereich wird sichtbar.

Frage : wie kann man sonst noch den "Dropdown" Button einer ComboBox aktivieren ?

nun habe ich einen XbpPushbutton

Code: Alles auswählen

   oDlg:oPBtarget:activate  := {|uNIL1,uNIL2,self| oDlg:OpenTargetDir()  }

METHOD SaveDlg:OpenTargetDir(lShow)
   PostAppEvent(xbeP_Keyboard,xbeK_F4,,::oCombo)
RETURN
das klappt auch wenn auch auf den Button klicke =D>
da ich es aber auch mit dem Keyboard bedienen will hab ich dass

Code: Alles auswählen

   CASE nEvent = xbeP_Keyboard .AND. mp1 == xbeK_ALT_T
        PostAppEvent(xbeP_Activate,,,oDlg:oPBtarget)
ich aktiviere dadurch also den Pushbutton der ja zuvor funktioniert hat.
dummerweise "verabschiedet" sich die App ... ohne Errorsys oder XppFatal.log :angry4:
ich sehe keinen Unterschied ob ich mit der Maus klicke oder es per PostAppEvent() aktiviere :?:

ich habe ein Demo angefügt mit der Bitte ob ihr das verifizieren könnt.
COMBOBUG.ZIP
(1.35 KiB) 193-mal heruntergeladen
nun hab ich es weiter probiert. wenn ich die Msgbox() vorher anzeigen lasse geht es auch mit dem Keyboard.

Code: Alles auswählen

METHOD SaveDlg:OpenTargetDir(lShow)
   DEFAULT lShow TO .T.
   IF lShow
      msgbox("ok")
   ENDIF
   CLEAR TYPEAHEAD
   PostAppEvent(xbeP_Keyboard,xbeK_F4,,::oCombo)
RETURN
ich kann einem XbpPushbutton aber keine Parameter mitgeben da

Code: Alles auswählen

|uNIL1,uNIL2,self|
um den Parameter lShow zu "steuern"

hat jemand noch eine Idee wie man eine ComboBox per Keyboard "aufmacht" :?:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ComboBox BUG mit Hotkey ?

Beitrag von AUGE_OHR »

ich habe weitere (erfolglose) Versuche gemacht die Combobox zu öffnen

Code: Alles auswählen

#define VK_F4           0x73a
#define WM_KEYDOWN      0x0100
#define WM_KEYUP        0x0101
#define KEYEVENTF_KEYUP 0x0002

METHOD SaveDlg:OpenTargetDir(lShow)
LOCAL cStr

   CLEAR TYPEAHEAD
// das geht ... aber
// PostAppEvent(xbeP_Keyboard,xbeK_F4,,::oCombo)

   SetAppFocus(::oCombo)
   SendMessageA(::oCombo:GethWnd(),WM_KEYDOWN,VK_F4,0)
   SendMessageA(::oCombo:GethWnd(),WM_KEYUP  ,VK_F4,0)

   SetAppFocus(::oCombo)
   keybd_event( VK_F4, 0, 0, 0 )
   keybd_event( VK_F4, 0, KEYEVENTF_KEYUP, 0 )

   SetAppFocus(::oCombo)
   cStr := cGenKeyboardInput(VK_F4)
   cStr += cGenKeyboardInput(VK_F4,,KEYEVENTF_KEYUP)
   SendInput( cStr )

RETURN
* ------------------------------------------------------------------------- *
DLLFUNCTION SendMessageA( nHWND, nMsg, nMp1, nMp2 ) USING STDCALL FROM USER32.
DLLFUNCTION keybd_event(mvkey, nscan, flags, xtra)  USING STDCALL FROM USER32.

FUNCTION cGenKeyboardInput( vk , scan , flags , time , extra )
DEFAULT vk TO 0, scan TO 0, flags TO 0, time TO 0, extra TO 0
RETURN PadR( U2Bin( 1 ) + W2Bin( vk )  + W2Bin( scan ) + ;
             U2Bin( flags ) + U2Bin(time ) + U2Bin( extra ) , 28 , Chr(0) )

FUNCTION SendInput( cInput )
RETURN DllCall( "user32",32,"SendInput", Int(Len(cInput) / 28) , cInput ,28)

FUNCTION cGenHardwareInput( msg , pl , ph )
DEFAULT msg TO 0, pl TO 0, ph TO 0
RETURN PadR( U2Bin( 2 ) + U2Bin( msg ) + U2Bin(pl) + U2Bin(ph) , 28 , Chr(0)) 
1.) SendMessageA()
2.) keybd_event()
3.) SendInput()
keiner von denen zeigt eine Reaktion :banghead:
ich verstehe es nicht denn ich verwenden ähnliche Konstruktionen sonst erfolgreich zum "aufklappen" einer ComboBox

Code: Alles auswählen

      IF oChild:isDerivedFrom( "XbpComboBox" )
         SETAPPFOCUS( oChild )
         keybd_event( VK_F4, 0, 0, 0 )
         keybd_event( VK_F4, 0, KEYEVENTF_KEYUP, 0 )
      ENDIF
es klappt nur mit PostAppEvent() und funktioniert es wenn ich auf den Button klicke ...
aber mit Keyboard ALT-T (egal jede Kombination) kommt der Absturz ohne Error/Fatal File :angry4:

bitte seht euch doch mal das Demo an ob ich im Source was falsch gemacht habe ...
gruss by OHR
Jimmy
Antworten