Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Nappeja hiirellä paineltavaksi

Sivun loppuun

Dj Wolf [14.10.2002 17:00:14]

#

*QB* Tällä koodilla saat melkoisen helposti suorakulmaisia nappeja jollakin tekstillä... Kun hiiri menee napin päälle, teksti vaihtaa väriä ja klikattaessakin tapahtuu kaikenlaista. Nappien maksimimäärä on rajoitettu 100:n,
mutta saatte helposti niitä lisääkin... Hiiriajurit eivät ole omaa tuotantoa.

DECLARE SUB tsekNappi (num!)
DECLARE SUB tutkiNappi (num!, mode!)               'Tässä on koodia,
DECLARE SUB Txt (tek$, mika.x!, mika.y!, vari!)    'jolla saa melkoisen
DECLARE FUNCTION onOver! (nappinum!)               'helposti hienoja nappeja
DECLARE FUNCTION AsetaNappi! (x!, y!, xx!, yy!)    'joita voi painella :)
DECLARE SUB PNappi (num!, col!, tek$, tcol)                       '-Dj Wolf
DECLARE SUB AlustaHiiri ()
DECLARE SUB HiiriLue (vasen%, oikea%, keski%, x%, y%)
DECLARE SUB HiiriRajat (x1%, y1%, x2%, y2%)
DECLARE SUB HiiriPiiloon ()
DECLARE SUB HiiriEsiin ()
DECLARE FUNCTION HiiriTarkista% ()
DECLARE SUB HiiriAjuri (ax%, bx%, cx%, dx%)
COMMON SHARED VAPAANAPPI, x%, y%, v%, k%, o%, ZC, ZOC, ZAC
DIM SHARED Hiiri$

TYPE tNappi       'tietoja napista:
vx AS INTEGER     'vasen x
vy AS INTEGER     'vasen y
ox AS INTEGER     'oikea x
oy AS INTEGER     'oikea y
paal AS INTEGER   'hiiri päällä
klik AS INTEGER   'hiiren klikkaus
onPaal AS INTEGER 'jos hiiri on jo päällä
onKlik AS INTEGER 'jos hiirellä on klikattu
END TYPE

DIM SHARED Nappi(100) AS tNappi 'max. määrä on 100 sekä napeissa
DIM SHARED t(100) AS STRING               'että näiden teksteissä
DIM SHARED kirjain(1 TO 8, 1 TO 8, 1 TO 255) AS INTEGER

CLS : SCREEN 13: AlustaHiiri: GOSUB fontti.muistiin: COLOR 15

ZC = 1  '<-----                                 NAPIN PERUSVŽRI
ZOC = 3 '<-----            TEKSTIN VŽRI, JOS HIIRI NAPIN PŽŽLLŽ
ZAC = 9 '<--- NAPIN KEHYKSEN VŽRI, JOS HIIRELLŽ KLIKATTU NAPPIA

n1 = AsetaNappi(10, 170, 70, 190)     'asetetaan N1 -nappi
n2 = AsetaNappi(80, 170, 140, 190)
n3 = AsetaNappi(150, 170, 230, 190)
n4 = AsetaNappi(240, 170, 300, 190)

t(1) = "UUSI": t(2) = "LATAA"         'nappien tekstit!
t(3) = "ASETUKSET": t(4) = "POISTU"

PNappi n1, ZC, t(1), ZC               'piirretään N1 -nappi T(1) -tekstillä
PNappi n2, ZC, t(2), ZC'
PNappi n3, ZC, t(3), ZC'
PNappi n4, ZC, t(4), ZC'

HiiriEsiin
DO                                                              'looppi alkaa
FOR i = 1 TO 1000
  HiiriLue v%, o%, k%, x%, y%
  tutkiNappi 1, 1: tutkiNappi 2, 2: tutkiNappi 3, 1: tutkiNappi 4, 1
  IF Nappi(4).klik THEN LOCATE 1, 10: PRINT "ohjelma loppuu...": EXIT DO
NEXT
IF Nappi(2).paal = 0 THEN Nappi(2).paal = 1 ELSE Nappi(2).paal = 0   'vilkutetaan toista nappia :)
LOOP                                                             'ja loppuu
END

fontti.muistiin:          'mun 'print joka ei sotke taustaa'-koodista
FOR asciikoodi = 1 TO 255
IF asciikoodi = 7 THEN asciikoodi = 8 ELSE
COLOR 16: LOCATE 1, 1: PRINT CHR$(asciikoodi)
FOR y = 1 TO 8
FOR x = 1 TO 8
vari = POINT(x - 1, y - 1)
kirjain(x, y, asciikoodi) = vari
NEXT x
NEXT y
NEXT asciikoodi
RETURN

DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B 'hiiriajurit
DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
DATA 8B,5E,06,89,17,5D,CA,08,00

SUB AlustaHiiri
Hiiri$ = SPACE$(57)
FOR i% = 1 TO 57
     READ A$
     h$ = CHR$(VAL("&H" + A$))
     MID$(Hiiri$, i%, 1) = h$
NEXT i%
END SUB

FUNCTION AsetaNappi (x, y, xx, yy)
VAPAANAPPI = VAPAANAPPI + 1
Nappi(VAPAANAPPI).vx = x
Nappi(VAPAANAPPI).vy = y
Nappi(VAPAANAPPI).ox = xx
Nappi(VAPAANAPPI).oy = yy
AsetaNappi = VAPAANAPPI  'palauttaa tehdyn napin numeron
END FUNCTION

SUB HiiriAjuri (ax%, bx%, cx%, dx%)
     DEF SEG = VARSEG(Hiiri$)                'Segmentti talteen
     Hiiri% = SADD(Hiiri$)                   'Offsetti talteen
     CALL Absolute(ax%, bx%, cx%, dx%, Hiiri%)    'Kutsu
END SUB

SUB HiiriEsiin
     ax% = 1                  'Funktio 1
     HiiriAjuri ax%, 0, 0, 0  'Kutsutaan hiiriajuria
END SUB

SUB HiiriLue (vasen%, oikea%, keski%, x%, y%)
     ax% = 3                            'Funktio 3
     HiiriAjuri ax%, bx%, cx%, dx%      'Kutsutaan hiiriajuria
     vasen% = ((bx% AND 1) <> 0)        'Luetaan nappien asennot
     oikea% = ((bx% AND 2) <> 0)        'bx:stä
     keski% = ((bx% AND 4) <> 0)
     x% = cx%                           'ja hiiren koordinaatit
     y% = dx%                           'cx:stä ja dx:stä
END SUB

SUB HiiriPiiloon
     ax% = 2                  'Funktio 2
     HiiriAjuri ax%, 0, 0, 0  'Kutsutaan hiiriajuria
END SUB

SUB HiiriRajat (x1%, y1%, x2%, y2%)
     ax% = 7                       'Funktio 7
     cx% = x1%                     'Rajat cx:ään ja dx:ään
     dx% = y2%
     HiiriAjuri ax%, 0, cx%, dx%   'Kutsutaan hiiriajuria
END SUB

FUNCTION HiiriTarkista%
     ax% = 0                       'Funktio 0
     HiiriAjuri ax%, bx%, 0, 0     'Kutsutaan hiiriajuria
     IF (ax% = 0) THEN             'Onko ajuri käytössä?
          HiiriTarkista% = 0       'jos ei, palautetaan 0
     ELSEIF (bx% = 3) THEN         'Kolminappinen hiiri?
          HiiriTarkista% = 3
     ELSEIF (bx% = 0) THEN         'Epästandardi hiiri?
          HiiriTarkista% = 1
     ELSE
          HiiriTarkista% = 2       'Tavallinen 2-nappinen hiiri?
     END IF
END FUNCTION

FUNCTION onOver (nappinum)
IF x% / 2 >= Nappi(nappinum).vx AND x% / 2 <= Nappi(nappinum).ox AND y% >= Nappi(nappinum).vy AND y% <= Nappi(nappinum).oy THEN
onOver = 1
ELSE
onOver = 0
END IF
END FUNCTION

SUB PNappi (num, col, tek$, tcol)
LINE (Nappi(num).vx, Nappi(num).vy)-(Nappi(num).ox, Nappi(num).oy), col, B
cenx = (Nappi(num).ox + Nappi(num).vx) / 2: ceny = (Nappi(num).oy + Nappi(num).vy) / 2
Txt tek$, cenx - (LEN(tek$) * 4), ceny - 4, tcol  'keskitetään teksti
END SUB

SUB tutkiNappi (num, mode)
SELECT CASE mode
CASE 1 'klikkauksen ja hiiren päälle menon tunnistava nappi
  IF onOver(num) = 1 THEN Nappi(num).paal = 1 ELSE Nappi(num).paal = 0
  IF -v% = 1 AND onOver(num) = 1 THEN Nappi(num).klik = 1 ELSE Nappi(num).klik = 0
  IF Nappi(num).paal = 1 AND Nappi(num).onPaal = 0 THEN Nappi(num).onPaal = 1: HiiriPiiloon: PNappi num, ZC, t(num), ZOC ELSE
  IF Nappi(num).klik = 1 AND Nappi(num).onKlik = 0 THEN Nappi(num).onKlik = 1: HiiriPiiloon: PNappi num, ZAC, t(num), ZOC ELSE
  IF Nappi(num).paal = 0 AND Nappi(num).onPaal = 1 THEN Nappi(num).onPaal = 0: HiiriPiiloon: PNappi num, ZC, t(num), ZC ELSE
  IF Nappi(num).klik = 0 AND Nappi(num).onKlik = 1 THEN Nappi(num).onKlik = 0: HiiriPiiloon: PNappi num, ZC, t(num), ZC ELSE

CASE 2 'vain klikkauksen tunnistava nappi, päällemeno saadaan manuaalisesti
  IF -v% = 1 AND onOver(num) = 1 THEN Nappi(num).klik = 1 ELSE Nappi(num).klik = 0
  IF Nappi(num).paal = 1 AND Nappi(num).onPaal = 0 THEN Nappi(num).onPaal = 1: IF onOver(num) THEN HiiriPiiloon: PNappi num, ZC, t(num), ZOC ELSE : PNappi num, ZC, t(num), ZOC ELSE
  IF Nappi(num).klik = 1 AND Nappi(num).onKlik = 0 THEN Nappi(num).onKlik = 1: IF onOver(num) THEN HiiriPiiloon: PNappi num, ZAC, t(num), ZOC ELSE : PNappi num, ZAC, t(num), ZOC ELSE
  IF Nappi(num).paal = 0 AND Nappi(num).onPaal = 1 THEN Nappi(num).onPaal = 0: IF onOver(num) THEN HiiriPiiloon: PNappi num, ZC, t(num), ZC ELSE : PNappi num, ZC, t(num), ZC ELSE
  IF Nappi(num).klik = 0 AND Nappi(num).onKlik = 1 THEN Nappi(num).onKlik = 0: IF onOver(num) THEN HiiriPiiloon: PNappi num, ZC, t(num), ZC ELSE : PNappi num, ZC, t(num), ZC ELSE
END SELECT
HiiriEsiin
END SUB

SUB Txt (tek$, mika.x, mika.y, vari)
FOR kerrat = 1 TO LEN(tek$)                      'näitä ei kannata
asciikoodi = ASC(MID$(tek$, kerrat, LEN(tek$))) 'kauheasti tutkia
FOR y = 1 TO 8                                 'koska koodi on
FOR x = 1 TO 8                                'aivan hirveää
IF NOT kirjain(x, y, asciikoodi) = 0 THEN
kirjain(x, y, asciikoodi) = vari
PSET (x + mika.x, y + mika.y), kirjain(x, y, asciikoodi)
ELSE
END IF
NEXT x
NEXT y
mika.x = mika.x + 8
NEXT kerrat
END SUB

Dj Wolf [15.10.2002 18:09:50]

#

Hmm... miksihän ääkköset sekosivat?
QB:ssä ne näkyvät kyllä oikein...

Gwaur [15.10.2002 18:44:37]

#

Tatu Peltolallakin on käynyt niin, että ääkköset sekoaa.

Antti Laaksonen [15.10.2002 18:56:06]

#

Nyt merkit näkyvät oikein, kun vinkki on siirretty QBasic-alueelle.

KimmoKM [15.10.2002 19:55:22]

#

Hieno. Voi kun joku tekisi pelkästään hiiren sijainnin lukemisen ja piirtämisen (ei mitään muuta) että tällaisetkin alkaisivat vähän ymmärtämään.

Herne [15.10.2002 20:41:05]

#

Näin sellasen koodinpätkän mikä tulkkas hiirtä, näytti sen kursorin ja ilmotti jos nappeja paino, oli pari sataa riviä tekstiä :)

Createman [15.10.2002 22:31:07]

#

Kiva et jonkuu tekemät ohjelmat sentää toimii! =) Yleensä nää hiiri hommat ei miul toimi..

Dj Wolf [16.10.2002 14:33:47]

#

Minulla yleensä qb valittaa call absolutesta, mutta kokeilkaahan käynnistää qb:nne parametrillä /LQB ,niin kyllä pitäisi toimia...

Tatu Peltola [23.05.2003 20:19:51]

#

****u hyi hyi hyi!!! Tässähän funktiot palauttavat liukuluvun! Hidas! Turha! Pitäis käyttää INTEGERiä (%)

Dj Wolf [27.05.2003 09:29:53]

#

Tatu, QB tekee liukuluvut (!) automaattisesti, enkä viitsinyt muuttaa... Jokainen, joka haluaa luvut kokonaislukuna, osaavat varmasti muuttaa funktiot toimimaan näillä :)

JJKulmo [26.05.2004 20:24:29]

#

Áivan mahtava

Juhko [14.08.2006 20:58:46]

#

Siis, mitä eroo noilla !:lla &:lla ja %:lla oikeen on?

T: QB-ohjelmoja, joka on hyvä kaikessa muussa paitsi tommosis

gamehouse [25.05.2007 15:44:11]

#

KimmoKM: etsippäs antti laaksosen koodivinkeistä...

gamehouse [26.05.2007 20:45:00]

#

!!! Ei toimi minulla! !!!

gamehouse [26.05.2007 20:50:38]

#

Outoa.. nyt toimii, mutta hiirtä ei näy


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta