Seite 1 von 1

DCREAD Handlerblock ESC abfangen

Verfasst: Do, 13. Jan 2011 15:25
von Manfred
Nächstes Problem,

weil beim Druck auf die ESC Taste der gesamte Dialog geschlossen wird ohne Rückfrage, aber beim Abschalten über NOESCAPEKEY man mit ESC auch nicht mehr eine Eingabe Abbrechen kann, habe ich versucht über HANDLERBLOCK die ESC Taste abzufangen um dann über eine Abfrage den User zu fragen, ob er abbrechen will um dann entsprechende Schritte einleiten zu können. Dabei ist es auch geblieben. Irgendwie bekomme ich es nicht hin. Ich möchte eigentlich eine Funktion aufrufen, die dann z.B. Parts, die disabled sind wieder enabled, oder was weiß ich, was mit in Zukunft noch so alles einfällt. Hat jemand einen Tipp parat, wie man sowas löst?

Re: DCREAD Handlerblock ESC abfangen

Verfasst: Do, 13. Jan 2011 16:55
von Bertram Hansen
Hallo Manfred,

eventuell hilft Dir das Beispiel weiter:

Code: Alles auswählen

*************************************************************************
/* Handlerblock Methode für DCREAD GUI in Maskread()
 * Parameters -> nEvent    - ist der numerische Ereigniscode, der das Ereignis kennzeichnet, das verarbeitet werden soll.
 *                           Das ist in der Regel der Rückgabewert der Funktion AppEvent() (siehe dort).
 *             -> mp1      - ist der erste Message-Parameter des Ereignisses, das verarbeitet werden soll.
 *                           Das ist in der Regel der erste Parameter der Funktion AppEvent().
 *             -> mp2      - ist der zweite Message-Parameter des Ereignisses, das verarbeitet werden soll.
 *                           Das ist in der Regel der zweite Parameter der Funktion AppEvent().
 *             -> oXbp     - A pointer to the object creating the event
 *             -> oDlg     - A pointer to the main dialogue object
 *             -> aGetlist - A pointer to the GetList array
 *             -> aRef     - A pointer to an optional Reference array that was passed to DC_ReadGets()
 *             -> lOk      - A logical value that is .TRUE. if the OK button was clicked and .FALSE. if CANCEL was clicked
 * 
 */
FUNCTION MyHandler( nEvent, mp1, mp2, oXbp, oDlg, aGetList, aRef, lOk )
   LOCAL cRet := DCGUI_NONE
   
   IF nEvent == xbeP_Keyboard
      IF mp1 == xbeK_ESC
         // Code
         // IF Bedingung
         //   cRet := DCGUI_CLEAR 
         // ENDIF
      ENDIF   
   ENDIF
RETURN cRet

Re: DCREAD Handlerblock ESC abfangen

Verfasst: Do, 13. Jan 2011 18:02
von Manfred
Hi Bertram,

das mit dem DCGUI_NONE habe ich ausprobiert, aber es wird weiterhin der komplette Dialog beendet. Ich habe alle DCGUI_XXX ausprobiert, bis auf die, die zum Vorgänger zurückgehen, oder so. Nichts war so, wie ich es brauchen könnte. Irgendwo liegt da der Hase im Pfeffer.

Re: DCREAD Handlerblock ESC abfangen

Verfasst: Do, 13. Jan 2011 21:15
von Manfred
Ich habe mir den Vorgang einmal im Debugger angesehen. Roger fragt zum Schluß wieder mp1 ab und da steht ja ESC drin. Somit wird immer abgebrochen. Ich verstehe das nicht.

Re: DCREAD Handlerblock ESC abfangen

Verfasst: Fr, 14. Jan 2011 7:45
von Wolfgang Ciriack
Manfred,
schau dir doch mal DCGET OPTIONS ABORTQUERY, CLOSEQUERY, EXITQUERY und QUITQUERY an, da kannst du doch eigene Funktionen zum Beenden nicht beenden aufrufen.

Re: DCREAD Handlerblock ESC abfangen

Verfasst: Fr, 14. Jan 2011 7:49
von Manfred
Hi Wolfgang,

die habe ich schon durch. Irgendwie will es nicht so, wie ich es haben will. Ich löse es jetzt erstmal anders. Irgendwann kommt schon die Erleuchtung.