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:

Call Absolute + Call Interrupt = Problem!

 
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
blackdrake



Anmeldungsdatum: 29.05.2007
Beiträge: 11

BeitragVerfasst am: 29.05.2007, 15:47    Titel: Call Absolute + Call Interrupt = Problem! Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 29.05.2007, 17:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
blackdrake



Anmeldungsdatum: 29.05.2007
Beiträge: 11

BeitragVerfasst am: 29.05.2007, 17:17    Titel: Antworten mit Zitat

Hallo A.K.

Vielen Dank für die Hilfe! Dies hat das Problem gelöst happy

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.05.2007, 19:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
blackdrake



Anmeldungsdatum: 29.05.2007
Beiträge: 11

BeitragVerfasst am: 30.05.2007, 15:33    Titel: Antworten mit Zitat

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 R.I.P.

Gruß
blackdrake
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