*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
Hmm... miksihän ääkköset sekosivat?
QB:ssä ne näkyvät kyllä oikein...
Tatu Peltolallakin on käynyt niin, että ääkköset sekoaa.
Nyt merkit näkyvät oikein, kun vinkki on siirretty QBasic-alueelle.
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.
Näin sellasen koodinpätkän mikä tulkkas hiirtä, näytti sen kursorin ja ilmotti jos nappeja paino, oli pari sataa riviä tekstiä :)
Kiva et jonkuu tekemät ohjelmat sentää toimii! =) Yleensä nää hiiri hommat ei miul toimi..
Minulla yleensä qb valittaa call absolutesta, mutta kokeilkaahan käynnistää qb:nne parametrillä /LQB ,niin kyllä pitäisi toimia...
****u hyi hyi hyi!!! Tässähän funktiot palauttavat liukuluvun! Hidas! Turha! Pitäis käyttää INTEGERiä (%)
Tatu, QB tekee liukuluvut (!) automaattisesti, enkä viitsinyt muuttaa... Jokainen, joka haluaa luvut kokonaislukuna, osaavat varmasti muuttaa funktiot toimimaan näillä :)
Áivan mahtava
Siis, mitä eroo noilla !:lla &:lla ja %:lla oikeen on?
T: QB-ohjelmoja, joka on hyvä kaikessa muussa paitsi tommosis
KimmoKM: etsippäs antti laaksosen koodivinkeistä...
!!! Ei toimi minulla! !!!
Outoa.. nyt toimii, mutta hiirtä ei näy
Aihe on jo aika vanha, joten et voi enää vastata siihen.