Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Interruptgesteuerte Tastaturabfrage

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 21.04.2005, 20:20    Titel: Interruptgesteuerte Tastaturabfrage Antworten mit Zitat

Hallo Leute!

Mit
Code:

KEY(1) ON
ON KEY(1) GOSUB Test

startet man ja eine Interruptgesteuerte Tastaturabfrage (ob das ein richtiger Interrupt ist, weiß ich nicht, kommt aber aufs Selbe raus).

Wie kann ich aber nun z.B. die Tastenkombination
Strg+X
so abfragen?

Mit
Code:

KEY 16, [...]
ON KEY(16) GOSUB Test

kann man ja den benutzerdefinierbaren Codes 16 bis k.A. ja Tastenkombinationen zuweisen.

Meine Frage also: Wie sieht die Stelle [...] für Strg+X aus, bzw.
wie kann man sich den entsprechenden Code für eine Taste zusammenbauen?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 21.04.2005, 20:47    Titel: Antworten mit Zitat

Ob da nicht INKEY$ einfacher ist? Ist dort ganz einfach CHR$(24). Siehe dazu

http://www.dreael.ch/QB/Tastenbelegung.xls
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.04.2005, 15:53    Titel: Antworten mit Zitat

Nein. lächeln
Es geht mir mehr um die Frage, wie so etwas zu realisieren ist.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 22.04.2005, 16:07    Titel: Antworten mit Zitat

Das sollte möglich sein.
Sieh mal in der QB-Online-Hilfe nach, Schlüssenwörter
KEY, ON KEY, KEY (Assignment)

Die Syntax sollte etwa so sein:

Code:

KEY Wert zwischen 15 und 25, CHR$(Flags) + CHR$(Scancode)


Flags ist dabei einer von diesen Werten:
Code:

0  keines
1  linke Shift-Taste
2  rechte Shift-Taste
4  Ctrl
8  Alt
32 Num Lock
64 Caps Lock

Wenn du willst, dass mehere Bedinungen zugleich gelten (also das auslösen nur, wenn CTRL + ALT + Taste gedrückt wird), dann kannst du die einfach mit nem OR verknüpfen:
Code:

AltKey = 8
CtrlKey = 4
CombinedKeys = AltKey OR CtrlKey

(in diesem Fall kannst du sie auch addieren, das hat den selben Effekt. CombinedKeys ist also 12)

Für die Scancodes siehst du einfach in die Hilfe, da dürfte es unter INKEY$ nen "Link" geben.


Anmerkung: Ich verwende QBX PDS 7.1, und habe diese Infos auch aus der QBX-Hilfe. Wenn du QB 4.5 verwendest, sind diese Möglichkeiten evtl nicht vorhanden. Ist aber unwahrscheinlich, da es ON KEY schon seit version 1 gibt.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.04.2005, 16:54    Titel: Antworten mit Zitat

Hab's versucht, aber unter Scancodes steht für X "2D".
Wenn ich jetzt aber
Code:

KEY 16, CHR$(4) + CHR$("2D")
KEY(16) ON
[...]

schreibe, kommt natürlich ein Fehler.

Ich benutze zwar QuickBASIC 4.5 aber damit muss es doch auch gehen!!!

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 22.04.2005, 17:56    Titel: Antworten mit Zitat

CHR$() erwartet eine Variable vom Typ INTEGER.
du gibst einen String an.
Du hast also in der QB-Help gelesen, dass X den Code 2D hat? Dann hast du wohl übersehen, dass diese angabe in Hexadezimal ist!
&H2D (ohne Anführungszeichen!) würde gehen.
Oder du schreibst einfach 45. &H2D = 45.

Jetzt sollte es gehen.
Viel Glück *g*

Und was willst du damit machen?
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.04.2005, 18:22    Titel: Antworten mit Zitat

Huuuups, war Hexadezimal... peinlich

Aber weder mit
Code:

KEY 16, CHR$(4) + CHR$(&H2D)

noch mit
Code:

KEY 16, CHR$(4) + CHR$(45)

klappt es.

Dusky_Joe hat Folgendes geschrieben:

Und was willst du damit machen?

Ich wollte einfach herfahren, wie das für verschiedene Tasten funktioniert,
rein des Interesses halber.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 22.04.2005, 19:15    Titel: Antworten mit Zitat

Sehr seltsam verwundert

Vllt irgendwelche Bugs im Code?

Du solltest so etwas haben:
Code:

KEY 16, CHR$(4) + CHR$(45)
KEY(16) ON 'GANZ WICHTIG!
ON KEY 16 GOSUB StrgX

DO
LOOP UNTIL INKEY$ = CHR$(27)
END

StrgX:
PRINT "STRG-X gedrückt"
END
RETURN

(grad ausprobiert - funzt auch bei mir ned...)


Hab diesen Code in der QB-Hilfe gefunden:
Code:

I = 0
CLS    'Clear screen.
PRINT "Press DOWN direction key to end."
KEY 15, CHR$(&H4) + CHR$(&H1F)
KEY(15) ON              'Trap CTRL+s.
KEY(14) ON              'Trap DOWN direction key.
ON KEY(15) GOSUB Keytrap
ON KEY(14) GOSUB Endprog
Idle: GOTO Idle         'Endless loop.

Keytrap:   'Counts the number of times CTRL+s pressed.
    I = I + 1
RETURN

Endprog:
    PRINT "CTRL+s trapped"; I; "times"
    END
RETURN

Der funtz übrigens auch ned.

Kanns sein, dass du WinXP hast?
Vllt liegts an dem. INP(96) läuft da ja auch ned gscheit, da kann schon a zusammenhang bestehen.
Ich hab den Code auch zur EXE compilert (mit der Option /V), und es tat sich nix.
Tja...

Aber:
Diese Methode ist sowiso nicht wirklich zu empfehlen, da...
...sie dein Programm ziemlich langsam macht. Denn QB muss jetzt nach jeder Zeile Prüfen, ob gerade irgendeine Taste gedrückt wird.
...du dadurch einen wunderbaren Spaghetti-Code erhältst. Die ganzen Gosubs sind ja wirklich nicht gerade das Gelbe vom Ei...
...dein Program eine weitere Fehlerquelle hat. Stell dir vor, du baust eine Speichern-Funktion ein, bei der der User Pfade angeben kann. Wenn du jetzt ALT als Event-Key definiert hast, kann er kein Backslash eingeben, ohne dass das Event ausgeführt werden. Das lässt sich zwar mit KEY() OFF unterdrücken, aber solche Zeilen vergisst man gerne mal...

Naja, das is ja wohl egal, wenns eh nicht funzt zwinkern
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 23.04.2005, 17:42    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:

Kanns sein, dass du WinXP hast?

Jau, WinXP Professional.

Dusky_Joe hat Folgendes geschrieben:

Stell dir vor, du baust eine Speichern-Funktion ein, bei der der User Pfade angeben kann. Wenn du jetzt ALT als Event-Key definiert hast, kann er kein Backslash eingeben, ohne dass das Event ausgeführt werden.

Außer man arbeitet mit INPUT/LINE INPUT, da müsste das funktionieren.

Naja, trotzdem danke für Deine Hilfe! lächeln

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz