F10-Taste im MDI-Fenster [Erledigt]

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

F10-Taste im MDI-Fenster [Erledigt]

Beitrag von Dieter »

Hallo,

Wenn ich in einem MDI-Fenster ein xbpBrowse-Objekt mit Funktionstasten
ausstatten möchte, dann könnte man doch folgenden Code verwenden:

Code: Alles auswählen

oDlg:KEYBOARD := {| mp1, mp2, obj | NettoAnalyseKeyBoard(mp1,mp2,obj)}

PROCEDURE NettoAnalyseKeyBoard(mp1,mp2,obj)
  *** Spezielle Tastatursteuerung für das xbpBrowse-Objekt der NettoAnalyse-Tabelle
  LOCAL oBrowse:=obj:childList()[1]:childlist()[1]
    DO CASE
      CASE mp1==xbeK_F10
        oBrowse:gotoRecNo(1)
    ENDCASE
RETURN
Alles klappt wie gedacht (die Browse-Methode wird ausgeführt), aber der Focus
im Browse geht verloren und landet im Rootmenü. Es muss also ein
xbeMENB_BeginMenu-Ereignis ausgelöst worden sein. Ich habe keine Ahnung, warum
dieses Ereignis ausgelöst wird und wie ich den Focus wieder in die
Browse-Tabelle bekomme? Verrückt ist, dass dieses Verhalten nur bei der
Funktionstaste F10 zu beobachten ist. Kann jemand diese Merkwürdigkeit
bestätigen. Ich arbeite übrigens noch mit der Version 1.90.331.
Zuletzt geändert von Dieter am Di, 02. Feb 2010 19:32, insgesamt 1-mal geändert.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: F10-Taste im MDI-Fenster

Beitrag von brandelh »

Hi,

das Verhalten ist normal, denn

1. ist die F10 Taste die Standardtaste für den Menüaufruf und
2. werden alle callback codeblocks NACH der Ausführung der gleichnamigen Methode ausgeführt !

entweder du leitest dir dein control ab und fängst diese Taste ab (die einzige richtige Lösung),
oder du setzt den Focus wieder auf das aktuelle control (das wird dem codeblock ja wieder übergeben).
Das letztere ist aber nur eine Krücke, denn wer weiß was sonst noch alles ausgelöst wird sobald du das control verlässt und im Menü ankommst ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: F10-Taste im MDI-Fenster

Beitrag von brandelh »

Hi,

ich sehe gerade du machst das an dem Dialog (oDlg) fest ?

Ich hätte es direkt beim Browse erwartet ... vermutlich aber das gleiche Verhalten, denn
wie geschrieben, wird zuerst der Menüaufruf verarbeitet, bis dein Code dran ist.

Code: Alles auswählen

CLASS myDialog from  XbpDialog
     EXPORTED:                         // Global sichtbar 
     METHOD keyboard
...
ENDCLASS 

METHOD myDialog:keyBoard (nKeyCode)
     if  nKeyCode == xbeK_F10
        ::oBrowse:gotoRecNo(1)         // den Browser kennst du hier ja ...
        // oder eine Funktion aufrufen ? Auf jeden Fall blocken ...
     else
        ::keyBoard (nKeyCode)           // alle anderen Tasten weitergeben ...
...
Du könntest das Blocken der Taste so ähnlich auch in der Eventschleife machen,
dann musst du aber aufpassen, dass nur in den bestimmten Controls / Seiten geblockt wird.

Wie geschrieben, der Anwender erwartet einen Menüaufruf auf F10 ;-)
Gruß
Hubert
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: F10-Taste im MDI-Fenster

Beitrag von Dieter »

Hallo Hubert,

Danke für die rasche Antwort. Deine Ausführungen sind wie immer klar und verständlich. =D>
Habe mir gerade den Microsoft-Artikel 126449 "Tastenkombinationen für Windows" ausgedruckt. Ich werde in Zukunft die allgemeinen MS-Tastaturbefehle berücksichtigen und keine Extrawürste mehr braten.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Antworten