Mite saa tehtyy qbasicilla ohjelma joka pistää hiire vasemma napi pohjaa laittaa hiire liikkuu nii että se piirtää v muotose jutu?
Hiiren paikkaa voi DOSissa muuttaa, mutta nähdäkseni ei painiketta ei ohjelmallisesti voi "painaa". Ainoaksi vaihtoehdoksi moisen toiminnallisuuden tekemiseksi DOSissa näkisinkin oman hiiriajurin kodaamisen.
Alla oleva koodi kuitenkin tekee sen V:n muotoisen liikkeen
DECLARE SUB mywait (s AS SINGLE) '$INCLUDE: 'qb.bi' DIM inregs AS RegTypeX ' Stuff going in DIM outregs AS RegTypeX ' Stuff coming out DIM i AS INTEGER inregs.ax = 0 CALL INTERRUPTX(&H33, inregs, outregs) IF outregs.ax = 0 THEN PRINT "Hiirtä ei ole :(" END END IF inregs.ax = 1 CALL INTERRUPTX(&H33, inregs, outregs) CLS FOR i = 1 TO 40 inregs.ax = 4 inregs.cx = i * 8 IF i > 20 THEN inregs.dx = (40 - i) * 8 ELSE inregs.dx = i * 8 END IF CALL INTERRUPTX(&H33, inregs, outregs) inregs.ax = 2 CALL INTERRUPTX(&H33, inregs, outregs) inregs.ax = 1 CALL INTERRUPTX(&H33, inregs, outregs) mywait .1 NEXT PRINT "Paina nappia" WHILE INKEY$ = "" WEND inregs.ax = 2 CALL INTERRUPTX(&H33, inregs, outregs) SUB mywait (s AS SINGLE) DIM w AS SINGLE w = TIMER DO IF TIMER < w THEN EXIT DO IF (w + s) < TIMER THEN EXIT DO LOOP END SUB
Tämä vaatii QB.QLB kirjaston, joten käynnistä QB käyttäen /L -parametria
Jotenkin tämä DOSin suosio vielä nykyaikana jaksaa hämmästyttää ja siihen liittyen miksi pitää saada liikutettua hiirtä nappi pohjassa kun kuitenkaan ei voi olla DOSin luonteesta johtuen muuta ohjelmaa käynnissä samaan aikaan.
Sanotaan nyt varmuuden vuoksi suoraan tuo, mitä Grez jo viestissään vihjasi: Windowsin hiirtä et voi QB:llä ohjata, koska QB toimii DOSissa (tai Windowsin DOS-virtuaalikoneessa).
Windows-funktioita pystyy kutsumaan niin, että teet Windows-ohjelman, joka kutsuu haluamaasi funktiota, ja ajat sen QB:stä SHELL-komennolla. En kuitenkaan suosittele tekemään niin. :)
Katso myös: https://www.ohjelmointiputka.net/keskustelu/
Onko muita keinoja tehä se? Pitäs saaha tehtyy ympyräki. Tartte sitä http://www.notdoppler.com/frame/639.html toho pelii.
Käytä jotain muuta ohjelmointikieltä. Aiheesta on keskusteltu jo kymmeniä kertoja, hae hakusanalla mouse_event.
Napin painaminen QB:llä ei edelleenkään onnistu (ainakaan ilman Windows-funktioita), mutta ympyrän muotoinen liike:
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 pi AS SINGLE DIM i AS RegType DIM x AS SINGLE DIM y AS SINGLE pi = 4 * ATN(1) i.AX = 0 CALL INTERRUPT(&H33, i, i) i.AX = 1 CALL INTERRUPT(&H33, i, i) x = 160 'koordinaatit y = 100 r = 30 'säde FOR index = 0 TO pi * 2 STEP .01 i.AX = 4 i.CX = x + (COS(index) * r) i.DX = y + (SIN(index) * r) CALL INTERRUPT(&H33, i, i) WAIT &H3DA, 8 NEXT index
En testannut tuota, joten virheitä saattaa löytyä.
Kaikki hiirikeskeytykset löytyvät osoitteesta http://heim.ifi.uio.no/~stanisls/helppc/int_33.
Voit käyttää tietääkseni kaikkia keskeytyksiä, komennolla:
CALL INTERRUPT(&Hkeskeytyksen_numero, lahde, kohde)
QB pitää käynnistää parametrilla /L ja alkuun pitää kirjoittaa:
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 lahde AS RegType DIM kohde AS RegType
Keskeytyskutsua ennen ja sen jälkeen esim. lahde.AX vastaa AX-rekisteriä, lahde.BX vastaa BX-rekisteriä jne.
lahde ja kohde voivat toki olla sama muuttuja.
EDIT: FreeBasic tukee tietääkseni WinAPI:a suoraan, ja sillä kääntyy suurin osa QB-ohjelmista. Suosittelen. ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.