nun, im Prinzip ist global abschalten fast richtig. Aber eben nur fast. Denn ich möchte mit F10 ja gerade etwas tun. Was von Dialog zu Dialog aber unterschiedlich ist. Und in manchen Dialogen auch mal garnichts ist.
Die ganze Sache sieht in dem betreffenden Teil so aus:
Erstellt wird der Dialog mit den Beleg-Kopfdaten. Dach Erstellen dieses Dialoges kommen die folgenden Punkte.
1) Direkt nach Erzeugen des Dialoges die Tastenbedienungen abfragen:
Code: Alles auswählen
oDlg:Keyboard := {|nKey,y,Obj| Checkkeys(nKey, aButton)} //Funktionstasten über Tastatur aufrufen
Code: Alles auswählen
aButton := {{"F2=Zurück" , GRA_CLR_DARKBLUE , {||oDlg:destroy(), SetAppFocus(oAltBrowse)} }, ;
{"F3=" , GRA_CLR_DARKGRAY , NIL }, ;
{"F4=Liste" , GRA_CLR_DARKBLUE , {||MsgBox("Liste öffnen"), SetAppFocus(oDlg)} }, ;
{"F5=Löschen" , GRA_CLR_RED , {||MsgBox("Beleg löschen"), SetAppFocus(oDlg)} }, ;
{"F6=s.Kdnr." , GRA_CLR_DARKGREEN, {||MsgBox("Kundennr. suchen"), SetAppFocus(oDlg)} }, ;
{"F7=" , GRA_CLR_DARKGRAY , NIL }, ;
{"F8=Speichern" , GRA_CLR_DARKGREEN, {||MsgBox("Speichern"), SetAppFocus(oDlg)} }, ;
{"F9=Neu Kd." , GRA_CLR_DARKPINK , {||MsgBox("Neuer Kunde"), SetAppFocus(oDlg)} }, ;
{"F10=Posit." , GRA_CLR_DARKPINK , {||positionen_bearbeiten(oDlg, Beleg_Kopfdaten->BK_BELEG, oHauptDlg), SetAppFocus(oDlg)} }, ;
{"F11=" , GRA_CLR_DARKPINK , NIL }, ;
{"F12=W.Bedarf" , GRA_CLR_BROWN , {||MsgBox("Warenbedarf anzeigen"), SetAppFocus(oDlg)} }, ;
{"^F2=" , GRA_CLR_DARKGRAY , NIL }, ;
{"^F3=" , GRA_CLR_DARKGRAY , NIL }, ;
{"^F4=Detail" , GRA_CLR_DARKPINK , {||zeige_detail(@oDlg, @lDetail), SetAppFocus(oDlg)} }, ;
{"^F5=" , GRA_CLR_DARKGRAY , NIL }, ;
{"^F6=s.Kd-dt." , GRA_CLR_DARKPINK , {||MsgBox("Anderer Kunde"), SetAppFocus(oDlg)} }, ;
{"^F7=" , GRA_CLR_DARKGRAY , NIL }, ;
{"^F8=" , GRA_CLR_DARKGRAY , NIL }, ;
{"^F9=Status" , GRA_CLR_DARKPINK , {||MsgBox("Status"), SetAppFocus(oDlg)} }, ;
{"^F10=Arb.S." , GRA_CLR_DARKPINK , {||MsgBox("Arbeitsscheine drucken"), SetAppFocus(oDlg)} }, ;
{"^F11=" , GRA_CLR_DARKPINK , NIL }, ;
{"^F12=Bestellen", GRA_CLR_DARKPINK , {||MsgBox("Bestellung auslösen"), SetAppFocus(oDlg)} } }
erzeuge_Funktionsleiste(@oDlg, aButton)
3) Die Funktionsleiste erstellen, über die letzte Zeile im Code oben. ich zeige hier nur den relevanten Codeteil aus "erzeuge_Funktionsleiste()" an, das mit Berechnen der Buttongröße etc. lasse ich mal weg:
Code: Alles auswählen
FOR i := 1 TO LEN(aButton)
oBut := XbpPushButtonColor():New(odlg:drawingArea, , {nX,nY}, {nButtonBreite, 25})
oBut:activate := aButton[i][3]
oBut:create()
// Beschriftung Farbe Bündig Schrift
oBut:SetCaptionClr(aButton[i][1], aButton[i][2], .F., cFont)
nX += nButtonBreite
IF i = 11
nX := 0
nY := 25
ENDIF
NEXT
Code: Alles auswählen
CASE nKey = xbeK_F10
IIF(aButton[9][3] <> NIL, EVAL(aButton[9][3]), NIL)
Code: Alles auswählen
{||positionen_bearbeiten(oDlg, Beleg_Kopfdaten->BK_BELEG, oHauptDlg), SetAppFocus(oDlg)}
oDlg: Der aktuelle Dialog
Beleg_Kopfdaten->BK_BELEG: Der aktuelle Datensatz für die Kopfdaten (um die richtigen Positionen für den zu erstellenden Browse rauszufiltern)
ohauptDlg: Der AppDesktop()
Nach Beenden des Positionen-Dialoges soll der Fokus wieder auf den aktuellen Dielaog gesetzt werden, daher noch das "SetAppFocus(oDlg)".
In allen anderen Funktionstasten in allen anderen Dialogen funktioniert das auch (wobei das hier der einzige ist, wo F10 wirklich etwas tut, die anderen Dialoge, wo F10 etwas bewirken sollte, sind noch nicht so weit). Nur hier macht F10 Schwierigkeiten. Indem zwar beleg_positionen() aufgerufen wird und auch alles korrekt durchgeführt wird wie in der Position beschrieben, also Erstellen aller angegebenen Xbparts etc. Aber dann der Fokus auf dem Menü steht.
Jan