![]() |
Programm reagiert nicht mehr nach Buttonclick
Tach,
ich war mir nicht sicher, also poste ich mein Problem hier: Ich will eine Art Chat programmieren, und da hab ich mit der Textausgabe angefangen. Die Buchstaben sollen nacheinander hingeschrieben (ins Memo) werden. Das löse ich ohne einen Timer, weil ich das dann als procedure machen wollte:
Delphi-Quellcode:
(Das ist jetzt zu Testzwecken ein Buttonklick.)
procedure TForm1.Button1Click(Sender: TObject);
var partmesstr: string[1]; messtr: string; begin messtr := Edit1.Text; repeat partmesstr := Copy(messtr, 1, 1); Memo1.Lines.Text := Memo1.Lines.Text + partmesstr; Delete(messtr, 1, 1); Application.ProcessMessages; Sleep(50); until Length(Edit1.Text) = 0; end; Wenn ich auf den Button drück', dann wird der Text auch schön hingeschrieben, allerdings reagiert das Programm danach nicht mehr auf Eingaben (das heißt, ich kann noch Text eingeben und weiter ausgeben lassen, aber Schließen funktioniert nicht mehr ... )?! :gruebel: Weiß jemand woran das liegt, oder bin ich zu blind den Fehler zu entdecken? :wall: :wiejetzt: Für Hilfe wär ich sehr dankbar. :angel: /Edit: Weiß nicht genau, welcher Titel aussagekräftig ist. :| :mrgreen: |
Re: Code funzt nicht, kann Fehler nicht entdecken
Bitte gib dem Thema einen aussagekräftigen Titel!
|
Re: Code funzt nicht, kann Fehler nicht entdecken
Delphi-Quellcode:
Das wird nie eintreten. Eher tritt noch
until Length(Edit1.Text) = 0;
Delphi-Quellcode:
ein ;)
Length(messtr) = 0;
|
Re: Programm reagiert nicht mehr nach Buttonclick
Sollte das nicht
Delphi-Quellcode:
heissen?
until Length(messtr) = 0;
edit: Roter Kasten? :? |
Re: Code funzt nicht, kann Fehler nicht entdecken
Hai richie,
als erstes muss ich dir sagen das der Titel deiner Frage nicht auf Dein Problem schliessen lässt. Darum bitte ich dich diesen zu ändern. Aber jetzt zu deiner Frage: Schaue dir doch mal die Bedingung deiner Repeat-Until Schleife an. Du prüft auf Edit1.Text änderst in der Schleife aber, so wie es auch richtig ist, die Variable messtr.. Da schreibe ich soooo lange und höflich... und was passiert? Drei andere sind schneller als ich :cry: |
Re: Programm reagiert nicht mehr nach Buttonclick
Oh, danke, das ging ja schnell! :idea: :thumb: :dp:
P.S.: Man ist das peinlich. :pale: :oops: |
Re: Programm reagiert nicht mehr nach Buttonclick
warum so umständlich? ich finde ne for-schleife wär hier viel angebrachter!
(dann wär dir der o.g. fehler auch nich passiert *g*)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var messtr: string; i: integer; begin messtr := Edit1.Text; for i:=1 to length(messtr) do begin Memo1.Lines.Text := Memo1.Lines.Text + messtr[i]; Application.ProcessMessages; Sleep(50); end; end; |
Re: Programm reagiert nicht mehr nach Buttonclick
und noch einen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Byte; // messstring variable gespart begin for i:=1 to length(edit1.Text) do begin memo1.Lines.Text:=memo1.Lines.Text+edit1.Text[i]; delay(50); // delay anstelle von sleep und processMessages end; end; delay -> ![]() Grüße Klaus |
Re: Programm reagiert nicht mehr nach Buttonclick
Zitat:
is wesentlich langsamer als auf n string zuzugreifen. daher is es schon besser den text einma auszulesen und dann auf die var zuzugreifen. is in diesem zusammenhang zwar eigentlich egal, aber wenn man schon hier anfängt mit delay() statt sleep() etc... :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz