![]() |
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; |
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.
|
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 ;) )
|
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; |
Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
Habs mit ProcessMessages gemacht! Danke! ;)
|
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! |
Re: Warum keine Zwischenergebnisse in Rechnung mit großn Zah
Hi CCRDude,
ich hätte jetzt genau so gut ein ![]() Mir ist schon bewusst, dass Sleep den kompletten Thread zum "Hängen" bringt. |
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 15:05 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