"KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

"KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von dtmackenzie »

Nur zur Info hier, falls jemand außer mir noch Text-Modus unter GUI benutzt.
Das ging schon mal wie dokumentiert, seit einer Weile aber nicht mehr.
Hat mir Probleme bereitet vor ACHOICE() und in UDF dafür.
Vermeide ich nun mit:
KEYBOARD CHR(1)
INKEY()
Zuletzt geändert von dtmackenzie am Fr, 27. Aug 2021 9:56, insgesamt 1-mal geändert.
Viele Grüße,
David
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren

Beitrag von Marcus Herz »

Ich hab immer Keyboard() ohne Parameter für solche Fälle aufgerufen.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren

Beitrag von dtmackenzie »

Danke Marcus!
In der Hilfe finde ich KEYBOARD nur als Command, es war mir nicht bewusst, dass es auch eine Funktion dazu gibt.
Weißt Du zufällig, ob sie auch noch mit der aktuellen Version der Workbench (Build 1461) funktioniert?
Sonst könnte ich natürlich auch selber probieren.
Viele Grüße,
David
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: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren

Beitrag von AUGE_OHR »

hi,
dtmackenzie hat geschrieben: Do, 26. Aug 2021 15:03 KEYBOARD CHR(1)
INKEY()
ein Zeichen in die Event-Queue zu "schreiben" um die zu "leere" ... hm

ich verwende
CLEAR TYPEAHEAD - Alle Zeichen aus dem Tastaturpuffer bzw. der Ereigniswarteschlange entfernen
gruss by OHR
Jimmy
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren

Beitrag von dtmackenzie »

Recht herzlichen Dank Jimmy!

CLEAR TYPEAHEAD ist optimal - selbsterklärend und genau dafür gedacht - und funktioniert! :D
Viele Grüße,
David
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von Marcus Herz »

CLEAR TYPEAHEAD ist ein Command auf die Funktion keyboard()
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von dtmackenzie »

Hallo Marcus,

seltsam, die Funktion keyboard() wurde bei mir nicht gefunden und führte zum Kompilationsfehler.

CLEAR TYPEAHEAD ging aber, und ist dokumentiert, also bleibe ich dabei.

Trotzdem Danke! :D
Viele Grüße,
David
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von Marcus Herz »

Mein Fehler: CLEAR TYPEAHEAD ist ok.
Wird aud die Funktion _Keyboard() umgesetzt.

Man sollte aber das COMMAND verwenden.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von dtmackenzie »

Nur zur Info:
Seltsamerweise ist manchmal auch CLEAR TYPEAHEAD nicht ausreichend, aber ich weiß nicht, ob das Problem allgemein nachvollziehbar ist.
Ich habe den Effekt, dass ausgewählt wird wenn ein ACHOICE offen ist und das Windows-Fenster verschoben wird!
Ich behalte zwar CLEAR TYPEAHEAD drin, mache aber nun zusätzlich doch KEYBOARD CHR(1) und INKEY() um das Problem zu umgehen.
Viele Grüße,
David
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: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von AUGE_OHR »

hi,
dtmackenzie hat geschrieben: Mo, 30. Aug 2021 10:12 Ich habe den Effekt, dass ausgewählt wird wenn ein ACHOICE offen ist und das Windows-Fenster verschoben wird!
benutzt du eine UDF zu ACHOICE :?:
gruss by OHR
Jimmy
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von dtmackenzie »

Hallo Jimmy,

ja, UDF sieht so aus.
Enthält zwar auch CLEAR TYPEAHEAD, ich meine aber nicht diese Zeile sondern vor dem Aufruf von ACHOICE.

Code: Alles auswählen

FUNC lifu_achoice_udf(nMode, nElement, nRow)
LOCAL nReturn:=AC_CONT,;        // default: continues
      nKey:=LastKey(), owa:=SELECT()

IF nMode == AC_EXCEPT
    DO CASE
    CASE nKey == K_RETURN
        nReturn := AC_SELECT      // select element

    CASE nKey == K_ESC
        nReturn := AC_ABORT       // terminate AChoice()

    CASE nKey == K_F4
        IF nElement > 0 .AND. nElement <= LEN(aFeld)
            SELECT lk
            DBSEEK(VAL(aFeld[nElement, 1]))
            //IF nrLK>1
            //    lk_RecEdit(.f.) //Datensatz bearbeiten
            //ELSE
                lk_RecView()    //Datensatz zeigen
            //END
            SELECT (owa)
            CLEAR TYPEAHEAD   // Avoid F4 being processed again
       END

    CASE nKey=K_ALT_Y   // Neue Instanz des Programmes starten
        Start_New()

    OTHERWISE
//        nReturn := AC_GOTO        // jump to element
    ENDCASE
END

RETURN nReturn
Viele Grüße,
David
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: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von AUGE_OHR »

hi,

siehe mal unter XbpWindow() -> MOVE

Code: Alles auswählen

   :move := {| aOldPos, aNewPos, self | ... }
vielleicht kannst du dort "abfangen" was dich stört wenn
ein ACHOICE offen ist und das Windows-Fenster verschoben wird!
gruss by OHR
Jimmy
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: "KEYBOARD CHR(0)" scheint nicht mehr den Buffer zu leeren [ERLEDIGT - stattdessen CLEAR TYPEAHEAD benutzen]

Beitrag von dtmackenzie »

Hi Jimmy,

da ich im Textmodus unter GUI arbeite, benutze ich nicht explizit XbpWindow.
Aber vielleicht kann ich es mit AppDesktop() holen...
Das Workaround scheint zwar erstmal zu gehen, aber das ist schon eine interessante Idee, Danke!
Viele Grüße,
David
Antworten