Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Warum keine Zwischenergebnisse in Rechnung mit großn Zahlen? (https://www.delphipraxis.net/93401-warum-keine-zwischenergebnisse-rechnung-mit-grossn-zahlen.html)

Svenkan 5. Jun 2007 12:47


Warum keine Zwischenergebnisse in Rechnung mit großn Zahlen?
 
Hey!
Wir überlegen uns in Informatik grade, warum bei Rechnung in einer Schleife mit innerer Ergebnisausgabe keine Zwischen-, sondern nur Endergebnisse ausgegeben werden.
Könnt ihr da helfen??

Delphi-Quellcode:
procedure TForm1.Button11Click(Sender: TObject);
var start,ende,zaehler,zahl: Integer;
begin
 start:=StrToInt(Edit22.text);
 zaehler:=start;
 ende:=StrToInt(Edit23.text);
 zahl:=0;
   while zaehler<=ende do begin
    zahl:=zahl+zaehler;
    zaehler:=zaehler+1;

    Edit24.Text:=IntToStr(zahl);
   end;

 ShowMessage('Die Summe beträgt '+IntToStr(zahl)+'!');
end;

Bernhard Geyer 5. Jun 2007 12:49

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Ohne ein Application.Processmessage oder Edit24.Update hat das Control keine Chance den aktualisierten Wert anzuzeigen.

jfheins 5. Jun 2007 12:51

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Und ohne ein Sleep oder so hat der Typ vorm Bildschirm auch keine Chance das Hochzählen zu erkennen ... zumindest nicht auf einem Halbwegs neuerem Prozessor mit > 1 MHz (möglicherweise übertrieben ;) )

Die Muhkuh 5. Jun 2007 12:51

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Hi,

meinst Du das in Edit24?

Die Sache wird einfach sein, dass das Edit nicht aktualisiert wird. Macht einmal folgendes:

Delphi-Quellcode:
procedure TForm1.Button11Click(Sender: TObject);
var start,ende,zaehler,zahl: Integer;
begin
start:=StrToInt(Edit22.text);
zaehler:=start;
ende:=StrToInt(Edit23.text);
zahl:=0;
   while zaehler<=ende do begin
    zahl:=zahl+zaehler;
    zaehler:=zaehler+1;

    Edit24.Text:=IntToStr(zahl);
    Edit24.Refresh; // Edit24 neu zeichnen
    Sleep(1000); // eine Sekunde warten, damit ihr auch seht, dass was neues im Edit steht
   end;

ShowMessage('Die Summe beträgt '+IntToStr(zahl)+'!');
end;

Svenkan 5. Jun 2007 12:53

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Habs mit ProcessMessages gemacht! Danke! ;)

CCRDude 5. Jun 2007 13:12

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Bitte bitte bitte...

Nur weil man aus DOS-Zeiten noch Sleep kennt, kommt doch endlich mal davon weg!
Sleep suspendiert den aktuellen Thread, d.h. auch Fenster etc. werden nicht neu gezeichnet, sondern sind während der Sleep-Periöde HÄNGEND!

Und auch in Threads hat Sleep nichts verloren! Wenn man diese pausieren will, nimmt man eine der MsgWaitFor..., die wenigstens auch frühzeitig abgebrochen werden können!

Die Muhkuh 5. Jun 2007 13:14

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Hi CCRDude,

ich hätte jetzt genau so gut ein DelayDelay nehmen können, jedoch war die Sache mit dem Sleep schneller und bringt den gewünschten Effekt, nämlich denn, dass man sieht, dass etwas passiert.

Mir ist schon bewusst, dass Sleep den kompletten Thread zum "Hängen" bringt.

CCRDude 5. Jun 2007 13:42

Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
 
Und was ist, wenn der Benutzer innerhalb der Sekunde zufällig in das Fenster klickt?
Dann erscheint in der Fenstertitelzeile "Anwendungsname (reagiert nicht)"...

Benutzer sind nunmal nicht immer so "wissend", daß ihnen sofort klar ist, daß sie während der Berechnung das Fenster nichtmal verschieben oder anders anfassen dürfen (in dieser Schleife sind das ja mal unbekannt viele Sekunden, vielleicht sogar Minuten, in denen nicht geklickt werden DARF... und wenns dadurch Minuten dauert, wird es noch wahrscheinlich, daß der Benutzer in ein anderes Fenster und dann zurückspringt und beim Zurückspringen alles hängt)... dieses Manko macht imho KEIN gewünschter Effekt (der im Vergleich zur grundlegenden Fensterbedienung eher untergeordnet ist) wett.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 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