Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm reagiert nicht mehr nach Buttonclick (https://www.delphipraxis.net/68899-programm-reagiert-nicht-mehr-nach-buttonclick.html)

richie 7. Mai 2006 21:28


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:
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;
(Das ist jetzt zu Testzwecken ein Buttonklick.)

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:

SirThornberry 7. Mai 2006 21:29

Re: Code funzt nicht, kann Fehler nicht entdecken
 
Bitte gib dem Thema einen aussagekräftigen Titel!

Dax 7. Mai 2006 21:32

Re: Code funzt nicht, kann Fehler nicht entdecken
 
Delphi-Quellcode:
until Length(Edit1.Text) = 0;
Das wird nie eintreten. Eher tritt noch
Delphi-Quellcode:
Length(messtr) = 0;
ein ;)

Mystic 7. Mai 2006 21:33

Re: Programm reagiert nicht mehr nach Buttonclick
 
Sollte das nicht
Delphi-Quellcode:
until Length(messtr) = 0;
heissen?

edit: Roter Kasten? :?

Sharky 7. Mai 2006 21:34

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:

richie 7. Mai 2006 21:35

Re: Programm reagiert nicht mehr nach Buttonclick
 
Oh, danke, das ging ja schnell! :idea: :thumb: :dp:


P.S.: Man ist das peinlich. :pale: :oops:

nat 7. Mai 2006 22:52

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;

Klaus01 8. Mai 2006 06:47

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 -> http://www.delphipraxis.net/internal...ect.php?t=7355

Grüße
Klaus

nat 8. Mai 2006 14:27

Re: Programm reagiert nicht mehr nach Buttonclick
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
var
  i: Byte;
  // messstring variable gespart

ja, auf kosten der geschwindigkeit. jedesma auf edit1.text zuzugreifen
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 15:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz