Kirjautuminen

Haku

Tehtävät

Koodit: QB: Hiiren käyttäminen

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

Kommentit

(nimetön) [16.07.2002 23:32:25]

#

tuohan toimii hienosti, mutta en tajua.
mistä tuo hiiren osoittimen ulkonäkö oikein tulee? miten sitä pääsee kopeloimaan?

Krisu [21.07.2002 23:46:45]

#

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ä.

Juuzo [17.08.2002 11:26:15]

#

ei toimi INTERRUPT.

Vilikki [19.08.2002 13:29:51]

#

Ei ole löytävinään QBX.QBL:llää, vaikka onkin qb-kansiossa...

Vilikki [19.08.2002 13:32:39]

#

Ja 4.5 ei toimi myöskään. Ja äsken kokeilin 7.1:sessä.

KimmoKM [26.10.2002 21:32:09]

#

Minulla toimii 4.5 voi tehdä tämän perusteella piirto-ohjelman.

Tatu Peltola [23.05.2003 20:16:47]

#

>>Eli tiedot ladattiin &H33:sta<<
Ai mitkä tiedot?? Se &H33 on keskeytyksen numero!!

nomic [21.06.2003 22:56:19]

#

mul toimi moitteettomasti
ja opinpa leikkii hiirellä :D

Guru-X [08.07.2003 22:12:57]

#

tatu: &H33 on portti, josta ladattiin tiedot

hunajavohveli [16.09.2003 18:09:34]

#

Vanha QBasic tosiaan kyseli joitain parametrejä käynnistyksessä, mutta 4.5 ei kysy mitään, enkä näin ollen saa CALL INTERRUPTIa toimimaan.

hunajavohveli [19.11.2003 22:45:01]

#

Eikä muuten kysy 7.1:kään.

Fisher [13.06.2004 17:32:41]

#

Hiiteen siitä INTERRUPT:einesi, Antti! Ohjeen mukaan
"The following QuickBasic keywords are not supported in QBasic: LOCAL, SADD, INTERRUPT, SETMEM..."

Fisher [14.06.2004 21:01:32]

#

eli siis INTERRUPT ei toimi qbasicissa, ja piste.

Puhveli [06.07.2004 19:45:25]

#

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.

Jorgga [29.03.2005 19:45:42]

#

CALL INTERRUPT(&H33, i, o) antaa virheilmoituksen missä vika?

Juhko [15.08.2006 18:20:48]

#

Superkiva!

Juhko [13.10.2006 15:07:25]

#

Käynnistitkö QB:n /L-parametrilla?

moptim [12.11.2006 07:53:17]

#

Tein yksinkertaisen piirto-ohjelman. (itse asiassa en tallentanut, oli aika KÄMÄNEN)

Chaosworm [19.04.2007 17:36:50]

#

Juhko kirjoitti:

Käynnistitkö QB:n /L-parametrilla?

Jaa... mikäs se on?

Dude [20.08.2007 16:30:51]

#

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

Juhko [04.08.2008 15:56:54]

#

Luettelo kaikista hiiren interrupt-numeroista:
http://heim.ifi.uio.no/~stanisls/helppc/int_33.html

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta