Hieman pöljä nimi aiheella, muttakun en keksinyt mitään kuvaavampaa. Olen aikalailla jumittunut erääseen ongelmaan, joka koskee QB:tä. Mietiskelin, miten saisin reunat ruudulle. Esimerkiksi, että ruutu näyttää tältä:
************************** * * * * * * * * **************************
Olisiko mitään järkevää neuvoa?
Kokeile vaikka LOCATE ja FOR-NEXT -käskyillä...
No etkö ihan PRINTillä voi tulostaa nuo merkit? LOCATE:lla voit tosiaan määrittää rivin ja sarakkeen, johon PRINT tulostaa tekstiä.
LOCATE rivi, sarake PRINT "tekstiä"
Ajattelin, että tuolla hunajavohvelin tavalla se saattais hieman hidastaa tuota minun ohjelmaa. Kyllähän mä ton LOCATEn tiesin. Se oli yksi ensimmäisiä komentoja CLS:än ja PRINTin jälkeen.
No voithan käyttää Line:ä tai muuta sellaista komentoa?
Ei auta Line merkkigrafiikkaan.
Latska: Onko tarkoituksena sitten piirtää jatkuvasti tuota reunaa? Yksi piirtokerta tapahtuu nimittäin niin nopeasti, ettei ihmissilmä huomaa.
Kokeilin tota juttua DO -lauseilla, se osoittautui toimivaksi, kunnes huomasin, että se jättää aikaisemmat piirroskerrat huomiotta. Tältä sen pitäisi näyttää:
************************ * * *
Mutta se näyttääkin tältä:
* * * *
Ja sen reunuksen pitäisi jäädä voimaan muun ohjelman ajaksi.
Edit: Pöh! Pitää huomenna puoli neljän aikaan iltapäivällä lähteä tädin mökille kahdeksi yöksi... Siitä tulee varmaan rattoisaa... Mustavalkotelkkari, ei tietokonetta jne...
Latska kirjoitti:
Hieman pöljä nimi aiheella, muttakun en keksinyt mitään kuvaavampaa.
No on joo, olisko vaikka "QBasic: ohjelmalle reunat tekstitilassa" ollut parempi?
Blaze kirjoitti:
Latska kirjoitti:
Hieman pöljä nimi aiheella, muttakun en keksinyt mitään kuvaavampaa.
No on joo, olisko vaikka "QBasic: ohjelmalle reunat tekstitilassa" ollut parempi?
Tuo kuulostaa kyllä fiksummalta.:)
Latska kirjoitti:
Mutta se näyttääkin tältä:
Ongelma on siinä, että kun PRINT pääsee yli rivin 23, se rupeaa skrollaamaan tekstiä ylöspäin. Itseäni tuon PRINTin kummalisuudet ottivat päähän kerran, ja tekaisin ihan oman tekstiä tulostavan komennon, ettei tuollaista tapahtuisi. No, joka tapauksessa asia korjaantuu sillä että pistät perään ; merkin. Eli siis
PRINT "*";
Nopein ja siistein taitaapi mennä näin:
locate rivi, 1 print string$("*", 20) '20 on printattavien merkkien määrä print "*" + space$(18) + "*" 'jne...
En ole ihan varma syntaksista, vedin päästä. Jos ei toimi, niin kattele qb:n manuaalista.
Turambar: Merkkien määrä tulee parametrinä ennen merkkiä. Muuten näyttäisi olevan oikein.
en muista qb:ta pahemmin mutta eikö tämmöinen käy?
print "*"; string$(32, "*"); "*" print "*"; space$(32); "*" print "*"; space$(32); "*" print "*"; string$(32, "*"); "*"
rumaa koodia mutta jotenkin näin homma saatiin toimimaan
tietysti vasemman/oikean -seinän ptint komennot kannattaa laittaa ehkä for-silmukkaan tj...
DECLARE SUB PRINTX (X!, Y!, VARI!, Merkki$) CLS FOR Y = 1 TO 25 PRINTX 1, Y, 6, CHR$(219) PRINTX 80, Y, 6, CHR$(219) NEXT FOR X = 1 TO 80 PRINTX X, 1, 6, CHR$(219) PRINTX X, 25, 6, CHR$(219) NEXT SLEEP SUB PRINTX (X, Y, VARI, Merkki$) Location = (X - 1) * 2 + (Y - 1) * 160 DEF SEG = &HB800 POKE Location, ASC(Merkki$) POKE Location + 1, VARI DEF SEG END SUB
Siinä on yksi tapa piirtää kehykset näytölle. Pohjana edesmenneen (?) BootSector4:n tekemä koodi.
-Grey-
Tekstimuistiin suoraan kirjoittaminen on tietysti myös hyvä tapa. Juuri sillä tavalla tein sen omankin PRINT-funktioni. QB:n valmiissa PRINTissä on lisäksi paljon turhaa mukana, kun otetaan huomioon, että tarkoituksena on vain tulostaa muutama merkki, joista ei ole edes tarkoitus tulla mitään tekstiä. Esim. PRINTin automaattiset rivinvaihdot olisivat tässä tapauksessa aivan turhia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.