 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 21.04.2005, 20:20 Titel: Interruptgesteuerte Tastaturabfrage |
|
|
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.04.2005, 15:53 Titel: |
|
|
Nein.
Es geht mir mehr um die Frage, wie so etwas zu realisieren ist.
jb |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 22.04.2005, 16:07 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.04.2005, 16:54 Titel: |
|
|
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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 22.04.2005, 17:56 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.04.2005, 18:22 Titel: |
|
|
Huuuups, war Hexadezimal...
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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 22.04.2005, 19:15 Titel: |
|
|
Sehr seltsam
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  _________________ 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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 23.04.2005, 17:42 Titel: |
|
|
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!
jb |
|
Nach oben |
|
 |
|
|
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.
|
|