3.Frage

Hi ihr pascal profis.

  1. Wie unterbinde ich eine falsche eingabe der benutzer (zbs. das programm erwartet char pubi gibt aber integer oder sonstwas ein)?

  2. Wie lösche ich nur enen vordefinierten teil des bildschierms?

  3. Wie bringe ich das programm bei nur eine vordefinierte zeit auf eine eingabe zu warten und merken ob was eingegeben worden ist oder nicht?

Motto: aller anfang macht spass.

meschugoj.

Hallo…

Hi ihr pascal profis.

  1. Wie unterbinde ich eine falsche eingabe der benutzer (zbs.
    das programm erwartet char pubi gibt aber integer oder
    sonstwas ein)?

Es gibt bei der TEdit-Komponente das Event OnExit. Guck mal in der Hilfe nach - mit ein wenig Hirnschmalz solltest Du das hinbekommen. Lernen tut man ja nur wenn man sich selbst was erarbeitet und es nicht vorgekaut bekommt… :smile:

  1. Wie lösche ich nur enen vordefinierten teil des
    bildschierms?

Was willst Du bitte? Ich verstehe diese Frage nicht… Aber… Guck Dir mal Canvas (TCanvas) an…

  1. Wie bringe ich das programm bei nur eine vordefinierte zeit
    auf eine eingabe zu warten und merken ob was eingegeben worden
    ist oder nicht?

  1. Möglichkeit:

TEdit.OnEnter-Event

 TimerWait.Interval := 15000; // 15 Sekunden warten
 TimerWait.Enabled := true;

TimerWait.OnTimer-Event

 if Trim(Edit1.Text) = '' then
 showmessage('dummer benutzer hast nichts eingegeben!');
 TTimer(Sender).Enabled := false;

  1. Möglichkeit

TEdit.OnEnter-Event

 start := gettickcount; //start vom Typ Cardinal in var-Abschnitt deklarieren!
 repeat
 application.processmessages;
 until gettickcount \>= start + 15000;
 if Trim(TEdit(Sender).Text) = '' then
 ShowMessage('du warst wieder dumm!');

  1. Möglichkeit

Über Threads arbeiten - das jedoch würde einen Anfänger sicherlich überfordern aber bei Interesse guck mal in TThread in der Hilfe rein.

Motto: aller anfang macht spass.

meschugoj.

Gruß
Stage

Hallo,

  1. Wie unterbinde ich eine falsche eingabe der benutzer (zbs.
    das programm erwartet char pubi gibt aber integer oder
    sonstwas ein)?

du kannst das „OnKeyPress“-Ereignis nutzen des TEdit, um die gedrückte Taste abzufragen. Willst du Z.B. nur Zahlen zulassen, heisst der Code zB:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in ['0','1','2', '3', '4', '5','6','7','8','9','0', '.']) then begin
 beep;
 Key := chr(0);
 end;
end;

(der Code funktioniert, ist aber noch nicht ganz vollständig. Aber den „Bug“ kannst du selber suchen:smile:)

Alternativ kannst du natürlich auch das TMaskEdit mal anschauen.

Gruss, Niels

  1. Wie unterbinde ich eine falsche eingabe der benutzer (zbs.
    das programm erwartet char pubi gibt aber integer oder
    sonstwas ein)?

readln(eingabe);
allesOK:=true;
for i:=1 to length(eingabe) do
if not (eingabe[i] in [‚0‘…‚9‘,’.’]) then allesOK:=false;
if allesOK then
begin

writeln(‚Benutzer hat alles richtig gemacht‘);
//TODO: jetzt konvertieren in eine Integer-Variable
end;

  1. Wie lösche ich nur enen vordefinierten teil des
    bildschierms?

löscht von der 5.Zeile und 5.Spalte bis zur 20. Zeile und 20. Spalte alles:

window(5,5,20,20); //Bildschirmbereich setzen…
clrscr; //…den clrscr löschen soll
window(1,1,25,80); //„reset“ nicht vergessen

  1. Wie bringe ich das programm bei nur eine vordefinierte zeit
    auf eine eingabe zu warten und merken ob was eingegeben worden
    ist oder nicht?

Ich weiss jetzt leider nicht, ob es die Proc getTickCount() unter DOS gibt. Falls nicht, musst du den Umweg über GetTime o.ä. machen. GetTickCount liefert die Anzahl verstrichenen Millisekunden.

function eingabeTimeout(): string;
var eingabe : string;
startzeit : longint;
begin
eingabe:=’’;
startzeit:=getTickCount();
repeat
if keypressed then
eingabe:=eingabe+readkey;
until (eingabe[length(eingabe)]=chr(13)) or (getTickCount()>startzeit+10000);
//Bricht nach Enter-Taste (chr(13)) oder 10 Sekunden (=10000ms) ab
eingabeTimeout:=eingabe;
end;

Ich hoffe, dass nicht allzuviele Tippfehler in meinen Codeschnipsel sind.

Gruß,
Frank

Hallo,
ich nehme an, Du willst was im alten TP machen, also kein
Objekt-Paskal oder sogar Delphi, oder?

  1. Wie unterbinde ich eine falsche eingabe der benutzer (zbs.
    das programm erwartet char pubi gibt aber integer oder
    sonstwas ein)?

Tja, erstmal alles einlesen, dann Plausibilitätstests machen
(bzw. erstmal Konvertieren. )
Kommt drauf an, wie die Eingabe aussieht. wenn Du z.B. eine
Eingabe als String einliest, dann mußt Du das ja mit der
Funktion VAL in eine Zahl umwandeln, sofern Du eine Zahl willst.
Dabei wird auch ein Fehlercode generiert, der abgetestet werden
sollte (z.B. weil nur Buchstaben statt Zahl eingegeben).
Das Ergebnis der Eingabe dann noch auf Plausibilität prüfen
(also z.B. Eingabebereich 0…10 -> Eingaben außerhalb abweisen).

  1. Wie lösche ich nur enen vordefinierten teil des
    bildschierms?

Im Grafikbildschirm oder wie?
-> Da gibt es Grafikbefehle.
Kann Dir auch eine schöne alte Toolsammlung für Grafik schicken.
Da sind solche „Fenster-Funktionen“ auch unterstützt.

  1. Wie bringe ich das programm bei nur eine vordefinierte zeit
    auf eine eingabe zu warten und merken ob was eingegeben worden
    ist oder nicht?

Im alten Pascal immer die PC-Uhr abfragen und vergleichen,
wieviel Zeit vergangen ist.

Eingaben werden entweder mit Enter quittiert oder anders
per „Keypressed“ abgefragt.

Motto: aller anfang macht spass.

Dann übe mal schön.
Gruß Uwi