Kirjoittaja: Antti Laaksonen
Kirjoitettu: 23.02.2002 – 21.11.2011
Tagit: koodi näytille, vinkki
Oletko aina halunnut käyttää hiirtä QBasicista? Tämä esimerkki näyttää, kuinka se käy, ja tarjoaa muutaman helppokäyttöisen aliohjelman. Muista käynnistää Q(uick)Basic parametrilla /L, jotta CALL INTERRUPT -käsky toimisi.
Pääohjelma:
CLS TYPE RegType ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER FLAGS AS INTEGER END TYPE DIM SHARED o AS RegType DIM SHARED i AS RegType SCREEN 12 a = AlustaHiiri(onko%, napit%) IF onko% <> -1 THEN GOTO virhe LOCATE 1: PRINT "Löytyi "; LTRIM$(STR$(napit%)); "-nappinen hiiri" NaytaHiiri 1 'näytetään hiiri RajaaHiiri 0, 640, 0, 480 'rajataan hiiren alue näytön kokoiseksi LOCATE 23: PRINT "(ohjelma loppuu, kun painat vasenta ja oikeaa nappia yhtäaikaa)" DO a = LueHiiri(nappi%, x%, y%) 'tutkitaan hiiren sijainti ja nappien tilat LOCATE 2: PRINT "Koordinaatit:"; x%; "x"; y% LOCATE 3: PRINT "Painettu nappi:"; nappi% IF nappi% = 3 THEN EXIT DO LOOP END virhe: PRINT "Hiirtä ei löytynyt!" END RESUME
Aliohjelmat:
FUNCTION AlustaHiiri (onko%, napit%) i.ax = 0 CALL INTERRUPT(&H33, i, o) onko% = o.ax napit% = o.bx END FUNCTION FUNCTION LueHiiri (nappi%, x%, y%) i.ax = 3 CALL INTERRUPT(&H33, i, o) nappi% = o.bx x% = o.cx y% = o.dx END FUNCTION SUB NaytaHiiri (tapa%) i.ax = tapa% CALL INTERRUPT(&H33, i, o) END SUB SUB RajaaHiiri (xp%, xs%, yp%, ys%) i.ax = 7 i.cx = xp% i.dx = xs% CALL INTERRUPT(&H33, i, o) i.ax = 8 i.cx = yp% i.dx = ys% CALL INTERRUPT(&H33, i, o) END SUB
tuohan toimii hienosti, mutta en tajua.
mistä tuo hiiren osoittimen ulkonäkö oikein tulee? miten sitä pääsee kopeloimaan?
Vaikutti sille, että ulkonäköön ei voi vaikuttaa. Toisessa vastaavanlaisessa koodinpätkässä hiiren muoto ladattiin muistista (niin näytti tässäkin olevan).
Eli tiedot ladattiin &H33:sta. Ajuri jota käytin, osasi muuttaa itsensä grafiikkatilassa nuoleksi ja tekstitilassa Qbasic:issä tutuksi harmaaksi neliöksi. Ilmeisesti niin on myös tässä.
ei toimi INTERRUPT.
Ei ole löytävinään QBX.QBL:llää, vaikka onkin qb-kansiossa...
Ja 4.5 ei toimi myöskään. Ja äsken kokeilin 7.1:sessä.
Minulla toimii 4.5 voi tehdä tämän perusteella piirto-ohjelman.
>>Eli tiedot ladattiin &H33:sta<<
Ai mitkä tiedot?? Se &H33 on keskeytyksen numero!!
mul toimi moitteettomasti
ja opinpa leikkii hiirellä :D
tatu: &H33 on portti, josta ladattiin tiedot
Vanha QBasic tosiaan kyseli joitain parametrejä käynnistyksessä, mutta 4.5 ei kysy mitään, enkä näin ollen saa CALL INTERRUPTIa toimimaan.
Eikä muuten kysy 7.1:kään.
Hiiteen siitä INTERRUPT:einesi, Antti! Ohjeen mukaan
"The following QuickBasic keywords are not supported in QBasic: LOCAL, SADD, INTERRUPT, SETMEM..."
eli siis INTERRUPT ei toimi qbasicissa, ja piste.
useimmat näkemäni QBasic -hiiriajurit on kyllä tehty Call Absoluten kanssa. Siinä mielessä QB4 ois paras kun siinä absolutet vielä toimii ja muistia on melkein yhtä paljon kuin Qbx:ssä, ja se osaa vääntää koodista binaariakin tietääkseni.
CALL INTERRUPT(&H33, i, o) antaa virheilmoituksen missä vika?
Superkiva!
Käynnistitkö QB:n /L-parametrilla?
Tein yksinkertaisen piirto-ohjelman. (itse asiassa en tallentanut, oli aika KÄMÄNEN)
Juhko kirjoitti:
Käynnistitkö QB:n /L-parametrilla?
Jaa... mikäs se on?
Mä yritin teherä tuolla piirto-ohojelman mutta screen 13 tuo ei toimi ku rajaa hiiren 320x200 tilaan sopivaks niin hiiri menee vaan keskiväliin mutta piirto(siis PSETillä hiiren koordinaattien mukaa) tulee vaan joka toiselle ruurulle näytöllä ja hiiri liikkuu koko näytöllä ku rajaa hiiren 640x200.
edit: Suluis oleva osa lisätty
Luettelo kaikista hiiren interrupt-numeroista:
http://heim.ifi.uio.no/~stanisls/helppc/int_33.