Seite 1 von 2

ESC Taste gedrückt ?

Verfasst: 18.10.2024 17:46
von Franz54
Hallo Gemeinde.
ich bin gerad dabei aus meinem QB Code was lauffähiges in PureBasic zu bauen.

Da habe ich jetzt gerade was, wofür ich keinen Ersatz finde. Der Codeschnipsel ist wie folgt:

Code: Alles auswählen

 eg$ = Input()
	  If eg$ = "" 
	    Goto eing14
	    If eg$ = CHR$(27)
	      End
Ich lese hier Taste für Taste aus, was ich gedrückt haben. wenn es ESC gedrückt wurde, bekommen ich chr$(27) und beende das Programm.
Aber diese Auswertung "CHR$()" gibts in PB nicht mehr. Was kann ich also ersatzweise für "if eg$ = CHR$(27)" benutzen?

Franz

Re: ESC Taste gedrückt ?

Verfasst: 18.10.2024 18:07
von Olafmagne
Franz54 hat geschrieben: 18.10.2024 17:46

Da habe ich jetzt gerade was, wofür ich keinen Ersatz finde. Der Codeschnipsel ist wie folgt:

Code: Alles auswählen

 eg$ = Input()
	  If eg$ = "" 
	    Goto eing14
	    If eg$ = CHR$(27)
	      End
Ich lese hier Taste für Taste aus, was ich gedrückt haben. wenn es ESC gedrückt wurde, bekommen ich chr$(27) und beende das Programm.
Aber diese Auswertung "CHR$()" gibts in PB nicht mehr. Was kann ich also ersatzweise für "if eg$ = CHR$(27)" benutzen?

Franz
Chr(xx) ist immer noch in PureBasic verfügbar
( siehe PB_ Hilfe -> String )
Es kommt nun auch noch darauf an, ob es eine GUI-App ist oder nicht!
in einem Fenster werden Tasten via ShortCut ermittelt, und einem MenuEvent wird generiert!

Code: Alles auswählen

  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_ShortCut_F, 15) ; Erstellt ein Tastaturkürzel 'CTRL+F' (STRG-F) für das Fenster 0,
                                                                    ; welches nach Tastendruck ein Menüereignis '15' liefert
Es muss also auch ein entsprechender MenuPunkt vorhanden sein.

Aber auch Chr() ist zur ermittlung des Ascii-Codes verfügbar, wenn man mit einem Screen arbeitet

Olaf

Re: ESC Taste gedrückt ?

Verfasst: 18.10.2024 18:47
von mk-soft
Hallo Franz,

ich glaube es ist besser die alten QBasic Sachen zu vergessen und neu anzufangen.
Mit Console und Input wie damals zu verwenden ist der falsche Weg um wieder mit programmieren anzufangen.
Da gibt es mit PureBasic und GUI OpenWindow und Gadgets ein besseren Weg.
Hierzu hatte ich dir zum Einstieg zwei Template reingestellt zu ausprobieren. Link zu den Templates.
Da braucht man sich nicht mehr wie früher sich um die ganzen Tastatur-Codes mehr kümmern.
Zur Dos-Zeit hatte ich auch unter Basic und Pascal auch die die ganze Tastatur- und Ausgabe- Steuerung selber erstellt.
Die Zeiten sind ein Glück vorbei.

Alles Gute
Michael

Re: ESC Taste gedrückt ?

Verfasst: 18.10.2024 22:20
von Franz54
mk-soft hat geschrieben: 18.10.2024 18:47 ....ich glaube es ist besser die alten QBasic Sachen zu vergessen und neu anzufangen.....
Ja, ich habe mir heute eines meiner Programme vorgenommen, um es auf PB zu ändern. Und habe schon gemerkt dass das nicht sooooo leicht ist. :mrgreen: Ich dachte damit meiner Erinnerung etwas auf die Sprünge helfen zu können, wenn ich die alten Code Lauffähig mache. Ich habe mir damals Module gemacht, von denen ich dann immer, wenn ich ein neues Programm in Angriff genommen habe, die Module reingenommen habe, die ich brauche, dann war eigentlich das Programm schon in der Grundstruktur fertig. Dann war nur noch die Kleinarbeit zu tun. EingabeMasken und DateieStrukuren anpassen. Das System muss ich mir wieder neu zusammenstellen.

Ich werde schon mit PB Beispielen lernen. Habe heute schon das erste in Angriff genommen.

Mal schauen wo ich lande. Danke euch, schönes Wochenende.
Franz :mrgreen:

Re: ESC Taste gedrückt ?

Verfasst: 18.10.2024 23:09
von jacdelad
Die Arbeit wird sich lohnen. Aber, auch wenn ich mich bei dem einen kddr anderen jetzt unbeliebt mache: nutze kein Goto/Gosub! Tu's nicht!!! Nutze Procedures und Schleifen und was weiß ich...

Re: ESC Taste gedrückt ?

Verfasst: 18.10.2024 23:25
von Franz54
jacdelad hat geschrieben: 18.10.2024 23:09 nutze kein Goto/Gosub! Tu's nicht!!!
Meist du allgemein, weil man jeden Sprung auch wieder konsequent zurück springen muss, wenn man saubere Funktion haben will. Oder weil der PB Compiler da Mist macht ?

Zweites wäre naürlich nicht so toll. :cry:

Servus
Franz

Re: ESC Taste gedrückt ?

Verfasst: 18.10.2024 23:28
von mk-soft
Da muss man sehr aufpassen, da man aus bestimmten Bereichen nicht raus springen darf. Stack Error ...

Re: ESC Taste gedrückt ?

Verfasst: 19.10.2024 08:20
von H.Brill
Das GOTO/GOSUB hatte Fred ja nur wegen den Usern, die vom alten GW-BASIC herkommen
erschaffen, um erste Schritte zu erleichtern. Am besten erst gar nicht benutzen und
gleich mit Proceduren anfangen. Dann gibt es auch bei etwas größeren Programmen
keinen Spaghetti-Code. Ich hatte damlas das schon bei QB vermieden, da dieses ja
auch schon SUBs kannte.
Wenn man sich mal verinnerlicht hat, daß eine Procedure und eine Funktion fast das gleiche
ist, lernt man diese auch schätzen. Der einzige Unterschied ist, daß eine Funktion einen
Wert (z.b. berechnet o.ä., oder True-False) mit PROCEDURERETURN zurück gibt. Auch ein Vorteil ist,
daß man Parameter mitgeben kann, das bei GOTO/GOSUB nicht der Fall ist. Ein weiterer Vorteil
ist auch die Wiedervendbarkeit solcher Proceduren, da man sie auch problemlos in Includedateien
sammeln kann.

Fred hat das ja gut gelöst und es gibt nur eine Procedure und keine Funktion.

Re: ESC Taste gedrückt ?

Verfasst: 19.10.2024 09:46
von H.Brill
Franz54 hat geschrieben: 18.10.2024 17:46 Hallo Gemeinde.
ich bin gerad dabei aus meinem QB Code was lauffähiges in PureBasic zu bauen.

Da habe ich jetzt gerade was, wofür ich keinen Ersatz finde. Der Codeschnipsel ist wie folgt:

Code: Alles auswählen

 eg$ = Input()
	  If eg$ = "" 
	    Goto eing14
	    If eg$ = CHR$(27)
	      End
Ich lese hier Taste für Taste aus, was ich gedrückt haben. wenn es ESC gedrückt wurde, bekommen ich chr$(27) und beende das Programm.
Aber diese Auswertung "CHR$()" gibts in PB nicht mehr. Was kann ich also ersatzweise für "if eg$ = CHR$(27)" benutzen?

Franz
Da hast du doch einen wunderbaren Ersatz in der Hilfe, nur daß es eben Inkey() heißt. Input() ist gedacht für Strings.

Code: Alles auswählen

If OpenConsole()
    PrintN("Druecken Sie Escape zum Beenden.")
  
    Repeat
      KeyPressed$ = Inkey()
      
      If KeyPressed$ <> ""
        
        PrintN("Sie drueckten: " + KeyPressed$)
        PrintN("Diese hat einen Roh-Code von: "+Str(RawKey()))
        
      ElseIf RawKey()
      
        PrintN("Sie haben eine Nicht-Ascii Taste gedrueckt.")
        PrintN("Diese hat einen Roh-Code von: "+Str(RawKey()))
        
      Else
        Delay(20) ; Wir verbrauchen nicht die gesamte CPU-Leistung, da wir uns auf einem Multitasking-OS befinden
      EndIf
    
    Until KeyPressed$ = Chr(27) ; Wartet, bis Escape gedrückt wird
  EndIf
Ein klein wenig umdenken muß man schon.

Re: ESC Taste gedrückt ?

Verfasst: 19.10.2024 13:19
von Franz54
H.Brill hat geschrieben: 19.10.2024 09:46 Da hast du doch einen wunderbaren Ersatz in der Hilfe, nur daß es eben Inkey() heißt. Input() ist gedacht für Strings.
Ein klein wenig umdenken muß man schon.
Das Input war schon der Ersatz, weil das QB "INKEY$" mit dem $ hinten dran von der Hilfe mit F1 nicht erkannt wurde. Dann dachte ich dafür gibt es keinen Ersatz und habe es erst mal mit "input()" ersetzt. Dabei gibt es bei PB "INKEY$" doch als "inkey()"

Genaus wie bei VAL$, MID$ u.s.w :mrgreen:

Das $ im Anschluss sorgt dafür, dass der Befehl von der Hilfe nicht erkannt wird, und daher auch nicht angezeigt wird. Man glaubt dann fürs erste, da gibt es nichts im PB.

Franz