Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: inkey

Sivun loppuun

juhaz [16.03.2004 08:01:40]

#

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...

sqwiik [16.03.2004 09:03:49]

#

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ä.

thefox [16.03.2004 12:52:41]

#

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

juhaz [16.03.2004 15:59:38]

#

jostain syystä sqwiikin koodipätkä ei toimi... Ei mitään toimintaa ole tuolla koodipätkällä... Quickbasic 4.5 käytössä.

Antti Laaksonen [16.03.2004 16:29:29]

#

Näistä voisi olla hyötyä:
https://www.ohjelmointiputka.net/koodivinkit/23397-qb-haastaja-input-käskylle
https://www.ohjelmointiputka.net/koodivinkit/23611-qb-kehittyneempi-input-funktio

juhaz [16.03.2004 17:32:10]

#

Enpä tullut noista linkeistä sen älykkäämmäksi kuin äskenkään.... :(

Gaxx [16.03.2004 19:47:34]

#

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 :)

sqwiik [16.03.2004 19:52:09]

#

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

Sivun alkuun

Vastaus

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

Tietoa sivustosta