 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Stefan1

Anmeldungsdatum: 26.12.2007 Beiträge: 5 Wohnort: 20 km westlich Frankfurt/Main
|
Verfasst am: 28.12.2009, 01:23 Titel: Eingabe-Routine benötigt |
|
|
Nachdem ich mich jahrelang mit Omikron-Basic unter der Atari-Oberfläche
von Magic_PC rungeärgert habe, habe ich mich nach einem anderen Basic
umgesehen und bin jetzt bei Freebasic gelandet. Gerne würde ich -lang qb
nutzen, da Quick-Basic am ähnlichsten ist, aber wie stellt man das ein?
Ich arbeite mit fbedit 1.0.7.3b und freebasic 0.20.0b-win32
Ich benötige eine Eingabe-Routine, um in einer Adressenkartei z.B. Namen
eingeben zu können. Gibt es diese hier?
Gruß Stefan |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.12.2009, 01:33 Titel: |
|
|
-lang qb muss entweder dem compiler als kommandozeilenparameter übergeben werden, oder (das stellt sicher, dass es überall garantiert richtig kompilliert wird) per metabefehl: #lang
Eine einfache Eingaberoutine wäre input _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.12.2009, 01:40 Titel: |
|
|
Zu FBEdit kann ich leider nichts sagen; du kannst mal unter freebasic-portal.de in den Tutorials suchen, vielleicht gibt es da was. Allerdings würde ich eher empfehlen, bei der Standardeinstellung -lang fb zu bleiben; wenn du ein Programm neu schreiben musst, sind die zusätzlichen Umstellungen zwischen QuickBASIC und FreeBASIC nicht sehr groß (und von Omikron BASIC aus wirst du definitiv neu schreiben müssen).
Die Frage nach der Eingabe-Routine müsstest du etwas präzisieren: Was genau hast du gegeben, was willst du haben?
edit: jepp, stimmt, #lang wäre gut. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Stefan1

Anmeldungsdatum: 26.12.2007 Beiträge: 5 Wohnort: 20 km westlich Frankfurt/Main
|
Verfasst am: 28.12.2009, 15:49 Titel: |
|
|
Ich habe Anfang der 1990er Jahre die folgende komfortable Eingabe-Routine von einer Qbasic-Seite runtergeladen und hoffte, dass es das auch für Freebasic gibt. Oder kann sie einer umschreiben?
Gruß Stefan
DEFINT A-Z
FUNCTION eingab$ (ze, sp, lg, alt$)
LOCATE , , 1
ex = 0: spt = sp: spe = sp + lg: ins = 1: l = 1: f$ = "_": f1$ = "__"
IF spe > 80 THEN lg = 80 - sp: spe = sp + lg
LOCATE ze, sp: PRINT STRING$(lg, f$);
LOCATE ze, sp: PRINT alt$;
LOCATE ze, sp, 1
DO
IF ex = 1 THEN EXIT DO
a$ = ""
DO WHILE a$ = ""
a$ = INKEY$
LOOP
a = ASC(LEFT$(a$, 1))
IF a = 13 THEN EXIT DO
IF a = 0 THEN
b = ASC(RIGHT$(a$, 1))
GOSUB spezial
ELSEIF a = 7 OR a = 8 THEN
GOSUB spezial
ELSEIF a >= &H20 OR a = &H15 THEN
GOSUB normal
END IF
LOOP
i = sp + lg - 1
s$ = ""
z1 = ASC(f$)
DO WHILE i >= sp
z = SCREEN(ze, i)
s$ = CHR$(z) + s$
i = i - 1
LOOP
J1 = INSTR(s$, f$)
J2 = INSTR(s$, f1$)
IF J1 = 1 THEN s$ = "": GOTO a1
IF J1 = lg THEN s$ = LEFT$(s$, lg - 1): GOTO a0
IF J1 = 8 THEN s$ = LEFT$(s$, 7): GOTO a0
IF J2 > 0 THEN s$ = LEFT$(s$, J2 - 1)
IF J1 < lg THEN GOTO a01
GOTO a0
a01:
s1$ = MID$(s$, J1 + 1, LEN(s$))
j3 = INSTR(s1$, f$)
IF j3 + J1 = lg THEN s$ = LEFT$(s$, lg - 1)
a0:
eingab$ = s$
a1:
J1 = 0: J2 = 0
EXIT FUNCTION
normal:
'Eingabe "lesbarer" Zeichen
'Insert-Modus aus
IF ins = 0 THEN
LOCATE ze, spt, 1
spt = spt + 1: l = l + 1
IF spt > spe THEN ex = 1: RETURN
PRINT a$;
'Insert-Modus ein
ELSEIF ins = 1 THEN
i = sp + lg - 2
DO WHILE i >= spt
z = SCREEN(ze, i)
LOCATE ze, i + 1
PRINT CHR$(z);
i = i - 1
LOOP
LOCATE ze, spt
spt = spt + 1
l = l + 1
IF spt > spe THEN ex = 1: RETURN
PRINT a$;
LOCATE ze, spt
END IF
RETURN
spezial:
'Verarbeitung "nichtlesbarer" Zeichen
'Zeichen unter Cursor l”schen (Entf-Taste)
IF a = 7 OR b = 83 THEN
flag = 0
i = spt + 1
DO UNTIL i = (sp + lg)
IF i > sp + lg - 1 THEN flag = 1: EXIT DO
z = SCREEN(ze, i)
LOCATE ze, i - 1
PRINT CHR$(z);
i = i + 1
LOOP
IF flag = 0 THEN LOCATE ze, sp + lg - 1: PRINT f$;
LOCATE ze, spt
'Zeichen links vom Cursor löschen (Back-Taste)
ELSEIF a = 8 AND i > 1 THEN
IF spt > sp THEN
spt = spt - 1
l = l - 1
i = spt + 1
END IF
DO UNTIL i = (sp + lg)
IF i > sp + lg - 1 THEN flag = 1: EXIT DO
z = SCREEN(ze, i)
LOCATE ze, i - 1
PRINT CHR$(z);
i = i + 1
LOOP
LOCATE ze, sp + lg - 1: PRINT f$;
LOCATE ze, spt
'Cursor nach links
ELSEIF b = 75 AND l > 1 THEN
l = l - 1
spt = spt - 1
LOCATE ze, spt
:
' Cursor nach rechts
ELSEIF b = 77 AND l < lg THEN
l = l + 1
spt = spt + 1
LOCATE ze, spt
'Insertmodus ein/aus
ELSEIF b = 82 THEN
ins = ins XOR 1
END IF
RETURN
END FUNCTION |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.12.2009, 16:51 Titel: |
|
|
Da vermisst wohl jemand INPUT USING?
Das Hauptproblem in diesem Code sind die unnötigen GOTOs und GOSUBs; ich hoffe, ich habe sie alle korrekt umschifft. Desweitern gibt es in FreeBASIC keine Suffixe mehr, weshalb mein unten stehender Code unter FreeBASIC, aber nicht mehr unter QBASIC läuft. Bitte ausführlich testen; ich habe nur einen grundsätzlichen Funktionscheck durchgeführt.
Code: | function eingab(ze as integer, sp as integer, lg as integer, alt as string) as string
locate , , 1
dim as integer ex = 0, spt = sp, spe = sp + lg, ins = 1, l = 1
dim as integer a, b, i, z1, j1, j2, j3, flag, z
dim as string taste, f = "_", f1 = "__", s, s1
if spe > 80 then lg = 80 - sp: spe = sp + lg
locate ze, sp: print string(lg, f);
locate ze, sp: print alt;
locate ze, sp, 1
do
if ex = 1 then exit do
dim as string taste = ""
do while taste = ""
taste = inkey
sleep 1
loop
a = asc(left(taste, 1))
if a = 13 then exit do
if a = 255 then
b = asc(right(taste, 1))
end if
if a = 255 or a = 7 or a = 8 then
'Verarbeitung "nichtlesbarer" Zeichen
'Zeichen unter Cursor löschen (Entf-Taste)
if a = 7 or b = 83 then
flag = 0
i = spt + 1
do until i = (sp + lg)
if i > sp + lg - 1 then flag = 1: exit do
z = screen(ze, i)
locate ze, i - 1
print chr(z);
i = i + 1
loop
if flag = 0 then locate ze, sp + lg - 1: print f;
locate ze, spt
'Zeichen links vom Cursor löschen (Back-Taste)
elseif a = 8 and i > 1 then
if spt > sp then
spt = spt - 1
l = l - 1
i = spt + 1
end if
do until i = (sp + lg)
if i > sp + lg - 1 then flag = 1: exit do
z = screen(ze, i)
locate ze, i - 1
print chr(z);
i = i + 1
loop
locate ze, sp + lg - 1: print f;
locate ze, spt
'Cursor nach links
elseif b = 75 and l > 1 then
l = l - 1
spt = spt - 1
locate ze, spt
' Cursor nach rechts
elseif b = 77 and l < lg then
l = l + 1
spt = spt + 1
locate ze, spt
'Insertmodus ein/aus
elseif b = 82 then
ins = ins xor 1
end if
elseif a >= &H20 OR a = &H15 THEN
'Eingabe "lesbarer" Zeichen
'Insert-Modus aus
if ins = 0 then
locate ze, spt, 1
spt = spt + 1: l = l + 1
if spt > spe then
ex = 1
else
print taste;
end if
'Insert-Modus ein
elseif ins = 1 then
i = sp + lg - 2
do while i >= spt
z = screen(ze, i)
locate ze, i + 1
print chr(z);
i = i - 1
loop
locate ze, spt
spt = spt + 1
l = l + 1
if spt > spe then
ex = 1
else
print taste;
locate ze, spt
end if
end if
end if
loop
i = sp + lg - 1
s = ""
z1 = asc(f)
do while i >= sp
z = screen(ze, i)
s = chr(z) + s
i = i - 1
loop
j1 = instr(s, f)
j2 = instr(s, f1)
if j1 = 1 then
s = ""
else
if j1 = lg then
s = left(s, lg - 1)
elseif j1 = 8 then
s = left(s, 7)
else
if j2 > 0 then s = left(s, j2 - 1)
if j1 < lg then
s1 = mid(s, j1 + 1, len(s))
j3 = instr(s1, f)
if j3 + j1 = lg THEN s = LEFT(s, lg - 1)
end if
end if
eingab = s
end if
j1 = 0
j2 = 0
end function
print eingab(7,10,5, "Test") |
edit: der Code ist ein Musterbeispiel für schwer durchschaubare Variablenkürzel ... ich habe fast alle Variablennamen einfach übernommen (bis auf "taste"). Ich habe auch keine Optimierungsversuche unternommen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Stefan1

Anmeldungsdatum: 26.12.2007 Beiträge: 5 Wohnort: 20 km westlich Frankfurt/Main
|
Verfasst am: 28.12.2009, 18:25 Titel: |
|
|
Ich habe Anfang der 1990er Jahre die folgende komfortable Eingabe-Routine von einer Qbasic-Seite runtergeladen und hoffte, dass es das auch für Freebasic gibt. Oder kann sie einer umschreiben?
Gruß Stefan
DEFINT A-Z
FUNCTION eingab$ (ze, sp, lg, alt$)
LOCATE , , 1
ex = 0: spt = sp: spe = sp + lg: ins = 1: l = 1: f$ = "_": f1$ = "__"
IF spe > 80 THEN lg = 80 - sp: spe = sp + lg
LOCATE ze, sp: PRINT STRING$(lg, f$);
LOCATE ze, sp: PRINT alt$;
LOCATE ze, sp, 1
DO
IF ex = 1 THEN EXIT DO
a$ = ""
DO WHILE a$ = ""
a$ = INKEY$
LOOP
a = ASC(LEFT$(a$, 1))
IF a = 13 THEN EXIT DO
IF a = 0 THEN
b = ASC(RIGHT$(a$, 1))
GOSUB spezial
ELSEIF a = 7 OR a = 8 THEN
GOSUB spezial
ELSEIF a >= &H20 OR a = &H15 THEN
GOSUB normal
END IF
LOOP
i = sp + lg - 1
s$ = ""
z1 = ASC(f$)
DO WHILE i >= sp
z = SCREEN(ze, i)
s$ = CHR$(z) + s$
i = i - 1
LOOP
J1 = INSTR(s$, f$)
J2 = INSTR(s$, f1$)
IF J1 = 1 THEN s$ = "": GOTO a1
IF J1 = lg THEN s$ = LEFT$(s$, lg - 1): GOTO a0
IF J1 = 8 THEN s$ = LEFT$(s$, 7): GOTO a0
IF J2 > 0 THEN s$ = LEFT$(s$, J2 - 1)
IF J1 < lg THEN GOTO a01
GOTO a0
a01:
s1$ = MID$(s$, J1 + 1, LEN(s$))
j3 = INSTR(s1$, f$)
IF j3 + J1 = lg THEN s$ = LEFT$(s$, lg - 1)
a0:
eingab$ = s$
a1:
J1 = 0: J2 = 0
EXIT FUNCTION
normal:
'Eingabe "lesbarer" Zeichen
'Insert-Modus aus
IF ins = 0 THEN
LOCATE ze, spt, 1
spt = spt + 1: l = l + 1
IF spt > spe THEN ex = 1: RETURN
PRINT a$;
'Insert-Modus ein
ELSEIF ins = 1 THEN
i = sp + lg - 2
DO WHILE i >= spt
z = SCREEN(ze, i)
LOCATE ze, i + 1
PRINT CHR$(z);
i = i - 1
LOOP
LOCATE ze, spt
spt = spt + 1
l = l + 1
IF spt > spe THEN ex = 1: RETURN
PRINT a$;
LOCATE ze, spt
END IF
RETURN
spezial:
'Verarbeitung "nichtlesbarer" Zeichen
'Zeichen unter Cursor l”schen (Entf-Taste)
IF a = 7 OR b = 83 THEN
flag = 0
i = spt + 1
DO UNTIL i = (sp + lg)
IF i > sp + lg - 1 THEN flag = 1: EXIT DO
z = SCREEN(ze, i)
LOCATE ze, i - 1
PRINT CHR$(z);
i = i + 1
LOOP
IF flag = 0 THEN LOCATE ze, sp + lg - 1: PRINT f$;
LOCATE ze, spt
'Zeichen links vom Cursor löschen (Back-Taste)
ELSEIF a = 8 AND i > 1 THEN
IF spt > sp THEN
spt = spt - 1
l = l - 1
i = spt + 1
END IF
DO UNTIL i = (sp + lg)
IF i > sp + lg - 1 THEN flag = 1: EXIT DO
z = SCREEN(ze, i)
LOCATE ze, i - 1
PRINT CHR$(z);
i = i + 1
LOOP
LOCATE ze, sp + lg - 1: PRINT f$;
LOCATE ze, spt
'Cursor nach links
ELSEIF b = 75 AND l > 1 THEN
l = l - 1
spt = spt - 1
LOCATE ze, spt
:
' Cursor nach rechts
ELSEIF b = 77 AND l < lg THEN
l = l + 1
spt = spt + 1
LOCATE ze, spt
'Insertmodus ein/aus
ELSEIF b = 82 THEN
ins = ins XOR 1
END IF
RETURN
END FUNCTION |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Stefan1

Anmeldungsdatum: 26.12.2007 Beiträge: 5 Wohnort: 20 km westlich Frankfurt/Main
|
Verfasst am: 28.12.2009, 19:12 Titel: |
|
|
Das doppelte Senden war mir aus Versehen passiert beim Rückwärtsgehen im Browser, kann man das löschen?
Vielen Dank an nemored, ich bin schon beim Testen. es kommen noch Fehlermeldungen. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.12.2009, 19:19 Titel: |
|
|
Hoppla, Fehlermeldungen hatte ich keine. Welche?
(Muss jetzt als -lang fb (Standardeinstellung) compiliert werden) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Stefan1

Anmeldungsdatum: 26.12.2007 Beiträge: 5 Wohnort: 20 km westlich Frankfurt/Main
|
Verfasst am: 28.12.2009, 19:27 Titel: |
|
|
error 21: Type mismatch in 'FUNCTION eingabe(ze AS INTEGER, sp AS INTEGER, lg AS INTEGER, alt AS STRING) As string'
error 50: Illegal outside a CONSTRUCTOR, DESTRUCTOR, FUNCTION, OPERATOR, PROPERTY or SUB block, found '=' in 'eingabe = s'
warning 14(0): Function result was not explicitly set
Wie und wo man -lang fb eingibt, ist mir immer noch nicht klar. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 28.12.2009, 19:33 Titel: |
|
|
Rechts oben, da wo "Windows GUI" steht muss "Windows Console" stehen, das ist so der Standardcompilierbefehl. Da kann man aber auch unabhängig vom Metabefehl "#lang" "QB Console" auswählen. Das ist ja der große Vorteil gegenüber FBIDE, weil die Option da so versteckt ist. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.12.2009, 20:18 Titel: |
|
|
Code: | found '=' in 'eingabe = s' |
ist definitiv falsch. Es sollte 'eingab = s' heißen. Kann sein, dass die anderen Fehler damit zusammen hängen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 28.12.2009, 21:12 Titel: |
|
|
Wieder einmal ein passender Artikel von mir zu diesem Thema:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BildschirmMasken.html
Beispiele sollte sich für FreeBasic recht einfach portieren lassen. Lediglich noch ein passendes SLEEP-Ereignisabwarten bei der INKEY$-Schleife vorsehen, damit die Routine keine CPU unnötig konsumiert. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 28.12.2009, 22:08 Titel: |
|
|
... jetzt wollt ich grad noch ne angepasste Konsolenversion von meinen Texteingabefeld(sGUI) zum besten geben, aber ... wie ich sehe...
Gott hat schon zugeschlagen und hat etwas aus seinem Schatzkästchen hervorgezaubert !
Egal hier meine Variante:
Code: | declare function EditString(row as integer,column as integer,displen as integer, txtlen as integer, txt as string="",passthrough as integer=0) as string
dim as string text="abc"
print text
text=EditString(10,40,15,40,text)
print
print text
sleep
'sollte auch in der Konsole funktionieren
'row Position des Eingabefeldes Zeile
'column Position des Eingabefeldes Spalte
'displen Länge des Eingabefeldes in Zeichen
'txtlen maximale Länge des einzugebenen Textes
'txt übergebener Text(optional)
'passthrough wenn 1 nur Darstellung des Eingabefeldes,kein editieren möglich (optinal)
function EditString(row as integer,column as integer,displen as integer, txtlen as integer, txt as string="",passthrough as integer=0) as string
if len(txt)>txtlen then txt=left(txt,txtlen)
function=txt
dim as string key,lpart,rpart
dim as integer i,scan,ascii,cpos,opos,bgcolor,fgcolor,cursorcolor,oldcolor,oldfgcolor,oldbgcolor
oldcolor = color
oldfgcolor = LOWORD(oldcolor)
oldbgcolor = HIWORD(oldcolor)
bgcolor=2
fgcolor=15
cursorcolor=10
cpos=len(txt)+1 'Cursor ans Ende setzen
if cpos>opos+displen then opos=cpos-displen else opos=0 'wenn Text länger als Eingabefenster Scrolloffset setzen
if passthrough=0 then 'wenn 1 soll das Eingabefeld nur dargestellt werden jedoch nicht "funktionieren"
do
'Anzeige des Editierfeldes
for i=0 to displen-1
if i+1+opos=cpos then color fgcolor,cursorcolor else color fgcolor,bgcolor
locate(row,column+i,0)
if i+1+opos<=len(txt) then print mid(txt,i+1+opos,1); else print " ";
next i
'Zeichen holen
do
ascii=-1
scan=-1
key=""
sleep 1
key=inkey
if len(key)=1 then
ascii=asc(key)
end if
if len(key)=2 then
ascii=asc(left(key,1))
scan=asc(right(key,1))
end if
loop until key<>""
'Cursorbewegung
if scan=75 and cpos > 1 then cpos -=1
if scan=77 and cpos < len(txt)+1 then cpos +=1
'Backspace
if cpos>1 then 'wenn Cursor nicht an erster Stelle ist Backspace erlauben
if scan=14 or ascii=8 then
if cpos=len(txt)+1 then 'wenn Cursor hinterm Text
txt=left(txt,len(txt)-1)
elseif cpos=2 then
txt=right(txt,len(txt)-1) 'wenn Cursor an 2.Stelle (vermutlich überflüssig)
else
lpart=left(txt,cpos-2) 'wenn Cursor an anderer Stelle
rpart=right(txt,len(txt)-cpos+1)
txt=lpart & rpart
end if
if opos>0 then opos -=1
cpos -=1
end if
end if
'Delete
if cpos<=len(txt) then 'wenn Cursor im Text und nicht dahinter delete möglich
if scan=83 or ascii=127 then
if cpos=len(txt) then 'wenn Cursor auf letzem Zeichen
txt=left(txt,len(txt)-1) 'letztes Zeichen weg
elseif cpos=1 then 'wenn Cursor auf erstem Zeichen
txt=right(txt,len(txt)-1) 'erstes Zeichen weg
else 'ansonsten (wenn) Cursor mittendrin
lpart=left(txt,cpos-1) 'String splitten CursorZeichen weg
rpart=right(txt,len(txt)-cpos)
txt=lpart & rpart 'und wieder zusammenpappen
end if 'Cursorposition bleibt erhalten!!!
end if
end if
'Zeichen einfügen
if len(txt)<txtlen then 'nur wenn String kürzer als txtlen können wir noch was machen
if ascii>=32 and ascii<>127 and ascii<>257 and ascii<>258 and ascii<>259 and ascii<>260 and ascii<255 then
'Ausschluss folgender Zeichen: alle ASC codes <32
' sowie ESC,BACKSPACE,DEL,UP,DOWN,LEFT,RIGHT sowie ASC(255)
if len(txt)>0 then 'wenn kein Leerstring
if cpos=1 then 'wenn Curor an erster Stelle
txt=chr(ascii)+txt 'Zeichen vorn einfügen
elseif cpos=len(txt)+1 then 'wenn Cursor hinter Text
txt=txt & chr(ascii) 'Zeichen hinten anhängen
else 'ansonsten (wenn) Cursor mittendrin
lpart=left(txt,cpos-1) 'String splitten
rpart=right(txt,len(txt)-cpos+1)
txt=lpart & chr(ascii) & rpart 'alle 3 Teile zusammenpappen
end if
cpos +=1 'Cusorposition erhöhen
end if
if len(txt)=0 then 'wenn Leerstring dann
txt=chr(ascii) 'erstes Zeichen setzen
cpos +=1 'Cusorposition erhöhen
end if
end if
end if
'Scrolling/Offset-Steuerung
'wenn Text länger wird/ist als das Editierfeld
if cpos<opos+1 then
opos=cpos-1
end if
if cpos>opos+displen then
opos=cpos-displen
end if
loop until ascii=13
end if
'Anzeige des Editierfeldes ohne Cursor
color fgcolor,bgcolor
opos=0
for i=0 to displen-1
locate(row,column+i,0)
if i+1+opos<=len(txt) then print mid(txt,i+1+opos,1); else print " ";
next i
color oldfgcolor,oldbgcolor 'Restaurieren der originalen Farben
function=txt
end function |
ps:
...ups, noch schnell ne Wanze im Code beseitigt..
und ähhmm... um Missverständnissen vorzubeugen: ich bin hier bestenfalls der Dorftrottel, mit Gott ist natürlich mein Vorposter gemeint  |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|