PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : delay durch Zeichen,


Marek Swierzy
08.08.2002, 13:08
Hallo zusammen,
ich arbeiteschön fleißig an meinem Terminal Programm,
jetzt möchte ich da eine Funktion einbauen das dass Programm bei einem bestimmten Zeichen warted.
Ich möchte das der Memo2.text nach dem"#"-zeichen durchsucht wird und das das Progrmm bei jedem #-zeichen eine Pause (die man im edit1.text eingibt (ms)) warted.
Der Normale Quell zu sednden sieht so aus :

procedure TForm1.Button5Click(Sender: TObject);
var
W: DWord;
P: Pointer;
s : String;
begin
s := HexToChar(Memo2.Text);
P:= @s[1];
WriteFile(hComm, P^, Length(s), W, nil);
Memo3.Text := Memo2.Text
end;
Ich habe mir überlegt das ich da noch folgendes zu code erhänze :

W: DWord;
P: Pointer;
s : String;
i : integer;
begin
for i:=1 to length (memo2.text) do begin
if memo2.text[i]='#' then delay (IntToStr(edit1.text));
s := HexToChar(Memo2.Text);
P:= @s[1];
WriteFile(hComm, P^, Length(s), W, nil);
Memo3.Text := Memo2.Text
end;

jedoch klappt das nicht so ganz.
WARUM ??!?


Felix Kaiser
08.08.2002, 15:14
Delay gibts nicht in Delphi, benutze dafür die API Funktion Sleep, tut prinzipiell dasselbe.

Marek Swierzy
08.08.2002, 15:15
DANKE sonst hääte ich jetzt wie ein Blöder nach delay befehlen gesucht !

DerWolf
08.08.2002, 17:22
Also ich würde das Senden in eine neue procedure einbauen:

// ****** Senden des Textes **************
procedure TForm1.SendText (s: string);
var
W: DWord;
P: Pointer;
tmp: string;
begin
tmp := HexToChar(s);
P := @tmp;
WriteFile(hComm, P^, Length(tmp), W, nil);
end;



Dann würde ich eine neue Funktion erstellen die folgendes tut:
der String mit den 'Pause' zeichen wird von Anfang an durchgegangen.
dabei wird jedes zeichen wenn es nicht das Pausezeichen ist an einer
Stringvariable hinzugefügt. findet man jetz das Pausezeichen werden
alle Zeichen die davor bzw. nach einem ev. davorliegenden pausezeichen
liegen versendet.
das ganze wird jetz wiederholt bis alle zeichen des originalstrings
durchgegangen sind, weil es könnten ja mehrere pausezeichen enthalten
sein. Der Code sieht so aus:

// ***** String versenden mit Sendepausen ******
procedure TForm1.SendeMitPause (s: string);
var tmp: string;
i, j: integer;
begin
i := 1;
while (i <= Length(s)) do
begin
tmp := '';
while (s[i] <> Edit2.Text[1]) and (i <= Length(s)) do //
Edit2.Text ist das PauseZeichen
begin
tmp := tmp + s[i];
inc(i);
end;
SendText(tmp);
Sleep(StrToInt(Edit3.Text)); // 1000 gibt dabei die Zeit
in Millisekunden an
inc(i);
end;
end;

Nun muss noch beim 'Senden' Knopf der Code so geändert werden das Zeile für Zeile des Memos versendet wird:

procedure TForm1.Button4Click(Sender: TObject);
var i: integer;
begin
for i := 1 to Memo1.Count-1 do
SendeMitPause(Edit1.Text);
end;



So das wars, müsste so funktionieren :)

Marek Swierzy
08.08.2002, 19:46
Geht das nicht einfacher ?
Aber das mit den Variablenversichbung je nicht schlecht ...

DerWolf
08.08.2002, 19:52
Kann gut sein, aber eigentlich isses doch nich so kompliziert???

Marek Swierzy
08.08.2002, 19:57
Das funzt bei mir nicht....
Ich schick dir den Quell per E-mail ok ?!?
DAnn kannst du mir sagen warum das nicht klapp !

DerWolf
08.08.2002, 20:27
ok mach das. morgen (sollte mein emailanbieter fertig gebastelt haben) bekommst dann bescheid.