 |
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 |
blackdrake
Anmeldungsdatum: 29.05.2007 Beiträge: 11
|
Verfasst am: 29.05.2007, 15:47 Titel: Call Absolute + Call Interrupt = Problem! |
|
|
Hallo.
Ich habe ein Problem, mit dem ich einfach nicht zurrecht komme.
Ich habe hier ein fremdes QBasic-Script, das Mausroutinen benutzt, unter QBasic 1.1 gut läuft, aber unter QuickBasic 4.5 einfach nicht funktionieren will.
Als erstes kam der Fehler bei CALL ABSOLUTE. Diesen allbekannten Fehler habe ich durch "QB.exe /L" behoben. Nun kommt jedoch bei CALL INTERRUPT der Fehler "Prozedur bereits in Quick-Bibliothek definiert". Wenn ich die CALL INTERRUPT in der SUB mausabfrag (xm, ym) auskommentiere, funktioniert die Maus im Programm nicht mehr.
Hier ist die Mausroutine des Programmes:
Code: | SUB mausabfrag (xm, ym)
tast = 0
CALL INTERRUPT(&H33, &H7, 0, 0, 630) 'Interrupt 33hex (Mausinterrupt)
'inreg.ax = 7hex (horiz. Grenzen)
'inreg.bx = 0 (ohne Bedeutung)
'inreg.cx = 100 (linke Grenze)
'inreg.dx = 200 (rechte Grenze)
CALL INTERRUPT(&H33, &H8, 0, 0, 340) 'Interrupt 33hex (Mausinterrupt)
'inreg.ax = 8hex (vertikale Grenzen)
'inreg.bx = 0 (ohne Bedeutung)
'inreg.cx = 50 (obere Grenze)
'inreg.dx = 300 (untere Grenze)
CALL INTERRUPT(&H33, &H1, 0, 0, 0) 'Interrupt 33hex (Mausinterrupt)
'inreg.ax = 1hex (Cursor an)
'inreg.bx = 0 (ohne Bedeutung)
'inreg.cx = 0 (ohne Bedeutung)
'inreg.dx = 0 (ohne Bedeutung)
WHILE tast = 0 OR tester = 1 'Solange keine Taste gedr. wurde
CALL INTERRUPT(&H33, &H3, 0, 0, 0) 'Interrupt 33hex (Mausinterrupt)
'inreg.ax = 3hex (Position u. Tasten)
'inreg.bx = 0 (ohne Bedeutung)
'inreg.cx = 0 (ohne Bedeutung)
'inreg.dx = 0 (ohne Bedeutung)
xm = OutregCx
ym = OutregDx
tast = OutregBx
IF tast = 0 THEN tester = 0
WEND
tester = 1
CALL INTERRUPT(&H33, &H2, 0, 0, 0) 'Interrupt 33hex (Mausinterrupt)
'inreg.ax = 2hex (Cursor aus)
'inreg.bx = 0 (ohne Bedeutung)
'inreg.cx = 0 (ohne Bedeutung)
'inreg.dx = 0 (ohne Bedeutung)
END SUB |
Weiß irgendwer Rat? Ich bin am Verzweifeln...
Gruß
blackdrake |
|
Nach oben |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 29.05.2007, 17:04 Titel: |
|
|
Hi,
der Fehler kommt daher das in der qb.bi (die Datei die durch /L geladen wird) bereits die SUB INTERRUPT definiert ist. Und ich vermute das in deinem Programm das gleiche SUB auch existiert.
Der einfachste Weg ohne viel "unbrauchbar" zu machen:
Benenne einfach das SUB INTERRUPT in deinem Programm um. (z.B. in MeinINTERRUPT)
Dies mußt du tun bei:
- Der Declareanweisung am Anfang deine Programmes
- Die Sub selber muß umbenannt werden
- Alle CALL INTERRUPT's in CALL MeinINTERRUPT umbenennen
Fertig und es sollte laufen.
MFG A.K. _________________
http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU* |
|
Nach oben |
|
 |
blackdrake
Anmeldungsdatum: 29.05.2007 Beiträge: 11
|
Verfasst am: 29.05.2007, 17:17 Titel: |
|
|
Hallo A.K.
Vielen Dank für die Hilfe! Dies hat das Problem gelöst
Bleibt noch ein neues Problem, weil das Programm zu schnell auf QB45 läuft, aber das ist ja jetzt ein anderes Thema... mal gucken, wie ich das Programm langsamer bekomme.
Gruß
blackdrake |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 29.05.2007, 19:29 Titel: |
|
|
falls das programm zur verzögerung leere FOR...NEXT schelifen verwendet: schlechter stil! läuft nämlich auf jedem rechner auf ner anderen geschwindigkeit! alternativen sind TIMER, WAIT und PIT-Calls (muss man selbst per interrupt proggen, ist aber meine lieblingsvariante gewesen, als ich noch in qb geproggt hab) _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
blackdrake
Anmeldungsdatum: 29.05.2007 Beiträge: 11
|
Verfasst am: 30.05.2007, 15:33 Titel: |
|
|
Hallo Jojo
Danke für die Antwort. TIMER und SLEEP sind nicht gerade das Gelbe vom Ei, aber PIT ist genau das, was ich gesucht habe. Leider führt die PIT-Routine in Verbindung mit PLAY das Programm zum Absturz: http://forum.qbasic.at/viewtopic.php?t=4282
Gruß
blackdrake |
|
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.
|
|