Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Hiiripaketti

Sivun loppuun

Puhveli [30.05.2005 17:03:01]

#

Putkassa on toistaiseksi vain yksi (1) vastaava hiirivinkki, ja sekin Laaksosen itsensä kirjoittama. Mutta tässä on uudenlainen vinkki, kätevällinen paketti, jonka voi suoraan kopioida omaan ohjelmaan. Awww.. sitähän me kaikki tahdomme <3

Ylempänä on siis subit, jotka copypastetat omaan projektiisi, ja sen alla esimerkki rottaviritelmän käytöstä.

Tämä käyttää Call Absolutea keskeytyskutsujen sijasta, mutta QBX:n käyttäjät joutuvat yhä käyttämään /L -parametriä. Vanhemmilla QBasiceilla ei tämänsortinlaisia ongelmallisuuksia ilmene. Hiirinarun (STRING) heksa-arvot minä muuten häpeäkseni kopioitsin muualta, koska en omista tietämystä siitä, miksi ne ovat sellaisia kuin ovat. Mutta se toimii ;)

Miten toimii?
MouseStruct -tyypin ja declare-julistukset kopioitset siis ohjelmasi alkuun. Niiden perässä on kutsu MouseInit -subiin, jonka tehtävänä on muuttaa hiirinaru ymmärrettävään muotoon (heksat asciimerkeiksi), mutta siitä ei todellisen copypastettajan tarvitse kantaa huolta. (Phew!)

Loput subit voit kopioida minkä tahansa subin väliin, ennen subeja tai jälkeen subien.
GetMouse päivittää hiirirakenteen arvot, kuten painetun napin (1 = vasen, 2 = oikea, 3 = molemmat) ja kohdistimen sijainnin.
ShowMouse (0 TAI -1) määrittää näytetäänkö oletuskursori. Pelkän Mouse.Visiblen muuttaminen ei siis käy!
Oletuskursorilla on muuten paha tapa jättää jälkensä, jos sen alle piirustetaan grafiikkaa. Sitä en siis suosittele käytettäväksi.

DECLARE SUB MouseShow (Visibility AS INTEGER)
DECLARE SUB MouseInit ()
DECLARE SUB GetMouse ()

    TYPE MouseStruct
        X                   AS INTEGER
        Y                   AS INTEGER
        Buttons             AS INTEGER
        Visible             AS INTEGER
    END TYPE

    DIM SHARED Mouse        AS MouseStruct
    DIM SHARED MouseSegment AS STRING: MouseInit


SUB GetMouse

    CALL Absolute(3, Mouse.Buttons, Mouse.X, Mouse.Y, SADD(MouseSegment))

END SUB

SUB MouseInit

    'Luetaan heksanumeroketju, ja muutetaan se ascii-koodeiksi
    'Saatu tekstinaru toimii segmenttiviittaajana (DEF SEG)

    MouseSegment = ""
    ASCSource$ = "5589E58B5E0C8B07508B5E0A8B07508B5E088B0F8B5E068B175B581E07CD33538B5E0C8907588B5E0A89078B5E08890F8B5E0689175DCA0800"

    FOR X = 1 TO LEN(ASCSource$) STEP 2
        MouseSegment = MouseSegment + CHR$(VAL("&H" + MID$(ASCSource$, X, 2)))
    NEXT

END SUB

SUB MouseShow (Visibility AS INTEGER)

    DEF SEG = VARSEG(MouseSegment)

    'Boolean muutetaan hiiren vaatimaksi "2=FALSE, 1=TRUE" -oudokkeeksi
    'Muutosta ei tehdä CALL Absoluten attribuuttina, jotta palautusarvo
    'säilyisi muuttujassa

    '+0, -1 => +2, +1
        Mouse.Visible = 2 - ABS(SGN(Visibility))

        CALL Absolute(Mouse.Visible, Mouse.Buttons, Mouse.X, Mouse.Y, SADD(MouseSegment))

    '+2, +1 => +0, -1
        Mouse.Visible = -ABS(SGN(Mouse.Visible - 2))


END SUB
DECLARE SUB MouseShow (Visibility AS INTEGER)
DECLARE SUB MouseInit ()
DECLARE SUB GetMouse ()


    CONST False = 0, True = NOT False

    TYPE MouseStruct
        X                   AS INTEGER
        Y                   AS INTEGER
        Buttons             AS INTEGER
        Visible             AS INTEGER
    END TYPE

    DIM SHARED Mouse        AS MouseStruct
    DIM SHARED MouseSegment AS STRING: MouseInit

SCREEN 12

MouseShow True
DO

GetMouse

LOCATE 1
    PRINT "Buttons:"; Mouse.Buttons
    PRINT "   LocX:"; Mouse.X
    PRINT "   LocY:"; Mouse.Y
    PRINT "Visible:"; Mouse.Visible

    SELECT CASE INKEY$
        CASE " ": MouseShow NOT Mouse.Visible
        CASE CHR$(27): END
    END SELECT

LOOP

Puhveli [30.05.2005 17:21:56]

#

Jos joku on kiinnostunut TAICA-COODISTA, joka palauttaa vasemman ja oikean napin simppelit totuusarvot, se on tässä:

VasenNappi = ((Mouse.Buttons AND 1) <> 0)
OikeaNappi = ((Mouse.Buttons AND 2) <> 0)

(kyseinen taica-coodi on hiirinarun heksa-arvojen lisäksi toinen qbasic.comista kopioimani asia)

Holle [09.12.2005 04:03:51]

#

ggggggggggggg

Holle [09.12.2005 04:05:53]

#

hei mitenkä tuota käytetään, miten tehdään sellainen,
että jos hiiren kohdistin menee tietyn jutun ylle ja painetaan nappia, niin tapahtuu jotain?

t. todellinen copypastettaja, joka ei ymmärrä ohjelmoinnista hölkäisen pölähdystä.

Juhko [20.07.2006 10:20:59]

#

Miks toi tekee niin että ku mä yritän ajaa sen ni se sulkee ja kumittaa kaiken ja sanoo "Ohjelma on suorittanut laittoman toiminnon ja se lopetetaan"???

Juhko [10.08.2006 18:28:10]

#

No nyt mä sain sen toimimaan. Siistin näkönen.

Juhko [10.08.2006 19:12:19]

#

lainaus:

hei mitenkä tuota käytetään, miten tehdään sellainen, että jos hiiren kohdistin menee tietyn jutun ylle ja painetaan nappia, niin tapahtuu jotain?

Se tehdään niin, että vertaat Mouse.Y:tä ja Mouse.X:ää siihen, mitä haluat että klikataan. Esimerkiksi:

IF Mouse.Buttons = 1 THEN

  IF Mouse.X < Kuvake.X + 50 and Mouse.X > Kuvake.X - 50 and  Mouse.Y < Kuvake.Y + 50 and Mouse.Y > Kuvake.Y - 50
  BEEP

END IF

Tuon voit lisätä ennen LOOP-riviä, ja laittaa SCREEN 12:n jälkeen näin:

Kuvake.X = 200
Kuvake.Y = 200
CIRCLE (Kuvake.X, Kuvake.Y), (50)

Jos meni oikein, niin kun klikkaat ympyrää, kuuluu piip.

Juhko [15.08.2006 15:34:57]

#

Mitä toi ASCSource$ oikeen meinaa?

moptim [04.11.2006 07:18:57]

#

emt ja epäselvän näkönen (ja juhkolle tiedoksi että beep ei päästä "piippausta" vaan sen tekee sound, beep tekee semmoisen oudohkon äänen, mitä ei voi kuvailla) mutta kivan näköinen on kyllä.
EDIT: puhvelilla on hauskat vitsit, "sub" ohjaa enkkuwikin sivulle "submarine"

Juhko [06.01.2007 17:40:01]

#

Minun vanhassa koneessa beep päästää piippauksen, kun siinä on vaan piipperiäänet. Kaverin koneessa se sanoo psöörs ja dospoksilla puup. XD

PS: KoTW etm (ei tiedä mitään) XD (no ei, vitsi vitsi)

Dude [05.08.2007 14:40:17]

#

Hmm. rottaviritelmä. Hiiriajurit. Hmm. Rotanajurit.

Juhko kirjoitti:

Miks toi tekee niin että ku mä yritän ajaa sen ni se sulkee ja kumittaa kaiken ja sanoo "Ohjelma on suorittanut laittoman toiminnon ja se lopetetaan"???

Sama

Juhko kirjoitti:

No nyt mä sain sen toimimaan. Siistin näkönen.

miten?
Edit: mulla vissiin ei toimi CALL Absolute ku mä oon koittanu muutaki niin ei oo toiminu.

Juhko [22.07.2008 22:38:29]

#

Mä kokeilin tota QBX:llä ja sillä ei toiminu mut QBASIC 1.1:llä kyllä toimii.
En tiedä miten teillä...

Nettimato [06.03.2010 13:12:54]

#

mul ei toimi


Sivun alkuun

Vastaus

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

Tietoa sivustosta