Kuinka saadaan poistettua tekstiä (kirjaimia), kun koodi on tälläinen?
'$INCLUDE: 'future.bi' set640x480 16 s: future.cls rgb2color(0, 0, 0) alku: d = d + 15 stringv$ = "" DO a$ = INKEY$ stringv$ = stringv$ + a$ IF a$ = CHR$(13) THEN GOTO entr future.print 10, d, stringv$, rgb2color(255, 255, 255), -1 LOOP entr: IF stringv$ = "exit" + CHR$(13) THEN GOTO lopeta GOTO alku lopeta: resetscreen END
Eli kuvitellaan, että käyttäjä kirjoittaa siihen moi ja haluaisi poistaa sen ja kirjoittaa siihen tilalle jotain muuta? Nyt siihen tulee vain jotain palloja, kun sitä nappulaa painaa...
Pallo tulee siitä, että merkkijonoon lisätään backspacen ascii-merkki, Chr$(8). Laita siihen seuraava:
IF a$ = CHR$(8) THEN 'Painettu backspace stringv$ = LEFT$(stringv$, LEN(stringv$) - 1) END IF
Tuo poistaa viimeisen merkin... Tietysti sinun pitää vielä pyyhkiäkin poistettu merkki näytöltä.
Mieluummin ehkä niin että lisää sitä stringiin (tai piirrä näytölle) ollenkaan jos se on kontrollimerkki (ASCII arvo < 32) niin ei tarvitse erikseen sitä enää turhaan pyyhkiä.
edit: typo
jostain syystä sqwiikin koodipätkä ei toimi... Ei mitään toimintaa ole tuolla koodipätkällä... Quickbasic 4.5 käytössä.
Näistä voisi olla hyötyä:
https://www.ohjelmointiputka.net/koodivinkit/
https://www.ohjelmointiputka.net/koodivinkit/
Enpä tullut noista linkeistä sen älykkäämmäksi kuin äskenkään.... :(
Tässä on toimiva koodi:
'$INCLUDE: 'future.bi' set640x480 16 future.cls RGB2Color(0, 0, 0) 'tän rivin voi laittaa muuallekki!(eli ei tartte GOTO:a) Siis tottakai tää on hyvä olla tässäkin. DO d = d + 15 stringv$ = "" DO a$ = INKEY$ IF a$ <> "" AND a$ <> CHR$(8) AND a$ <> CHR$(13) THEN stringv$ = stringv$ + a$ future.print 10, d, stringv$, RGB2Color(255, 255, 255), 0 END IF IF a$ = CHR$(13) THEN IF stringv$ = "exit" AND a$ = CHR$(13) THEN resetscreen END END IF 'tähän sit muut komennot jos on tarpeen :) END IF IF a$ = CHR$(8) AND LEN(stringv$) > 0 THEN stringv$ = LEFT$(stringv$, LEN(stringv$) - 1) future.print 10, d, stringv$ + " ", RGB2Color(255, 255, 255), 0 END IF LOOP UNTIL a$ = CHR$(13) LOOP
Jos haluat laittaa kirjotuksen taustan läpinäkyväks(-1) niin joudut kyllä kikkailemaan jonkin verran, mutta eiköhän se siitä. Poistin myös gotot ja korvasin ne muilla systeemeillä. Minusta se on noin huomattavasti loogisempi kuin joidenkin gotojen kanssa.
Edit: Pistin sinne hieman omaaki muutes tossa huomaamattani :)
Niin, luulin sinunkin hoksaavan koodini vajaatoimivuuden:
Jos painetaan Bacspace = Chr$(8), niin poistetaan yksi merkki ja sen jälkeen taas lisätään se :)
Llaitoin miltei loppumuotoon... Jätän yhä sen poistetun merkin graafisen pyyhinnän sinulle :)
DO a$ = INKEY$ IF a$ = CHR$(13) THEN GOTO entr ELSEIF a$ = CHR$(8) THEN 'Poistetaan viimeinen merkki (vain jos merkkejä jonossa) if LEN(stringv$) > 0 THEN stringv$ = LEFT$(stringv$, LEN(stringv$) - 1) ELSE 'Lisätään merkki vain, jos ehdot täyttyvät... stringv$ = stringv$ + a$ 'Lisätään merkki END IF future.print 10, d, stringv$, rgb2color(255, 255, 255), -1 LOOP
Aihe on jo aika vanha, joten et voi enää vastata siihen.