![]() |
Ausgabe verzögern
Hallo,
die Ausgaben in der folgenden Procedur sollen verzögert erscheinen. Mit delay(zahl) habe ich es versucht aber leider ohne Erfolg. Wer kann helfen?
Code:
Genutzt wird Lazarus Version 1.8.4
procedure TForm1.Button7Click(Sender: TObject);
var a, h, Af, U : Real; begin a:= strtofloat(Edit1.Text); h:= a/2*sqrt(3); Af := (a*a); Af := Af/4; Af := Af*sqrt(3); U := 3*a; Edit2.Text := floattostr(Af); Edit3.Text := floattostr(U); Edit4.Text := floattostr(h); end; vG Ulrich |
AW: Ausgabe verzögern
Da brauchst du einen Timer und etwas um die Werte zu speichern, die dann vom Timer nach Ablauf der Zeit gesetzt werden.
|
AW: Ausgabe verzögern
Befehle mit Namen wie Sleep, Delay oder sonstwas halten das gesamte Programm an, solange kannst du es auch nicht bedienen oder beenden.
Das Anschaulichste mit dem größten Lern-Effekt wäre wohl wirklich einen Timer zu benutzen. Den würdest du aktivieren, er zählt drei mal eine Sekunde hoch und wenn er bis drei gezählt hat kannst du die Werte einblenden. Es gibt noch x andere Möglichkeiten, aber ich denke auch mit einem Timer ist am einfachsten zu verstehen was abgeht und man lernt am meisten. |
AW: Ausgabe verzögern
Ganz simpel wäre ein Sleep. Nur ist dann so lange die Oberfläche nicht bedienbar.
|
AW: Ausgabe verzögern
Zitat:
Delphi-Quellcode:
procedure ResponsiveSleep(SleepTime: LongInt); Var FinalTick : QWord; begin FinalTick := GetTickCount64 + SleepTime; while GetTickCount64 < FinalTick do begin Sleep(10); Application.ProcessMessages; end; end; |
AW: Ausgabe verzögern
Zitat:
Dann doch lieber die Arbeit in einen Thread auslagern und dort Sleep nutzen. |
AW: Ausgabe verzögern
Zitat:
|
AW: Ausgabe verzögern
Zitat:
Warum nicht? Das sieht stark nach einem Hobby-Projekt aus. Manchmal kann man auch einen Einzeiler verwenden, es muss nicht immer davon ausgegangen werden, dass das Programm hunderte von Anwender haben wird. |
AW: Ausgabe verzögern
Nur weil es Hobby ist muss man nicht gleich zur "Ist zwar nicht so dolle, und ich verstehe auch nicht so wirklich was abgeht, aber es scheint halbwegs zu klappen"-Lösung nehmen.
Und "länger" ist eine Version mit z.B. einem Timer auch nicht ;-) |
AW: Ausgabe verzögern
Auch wenn Ulrich ulrich72 heißt, sieht mir das doch eher nach einer Schulaufgabe aus. Und da sollte die Lösung auch zum Niveau passen. Ein Sleep löst die Aufgabe und ein Timer wäre ein nice-to-have. Hier mit Threads arbeiten zu wollen, wäre zu viel des Guten, denke ich.
|
AW: Ausgabe verzögern
Plot Twist: Uli ist der Informatiklehrer!:-D
|
AW: Ausgabe verzögern
Liste der Anhänge anzeigen (Anzahl: 1)
Mit DELPHI XE7
Delphi-Quellcode:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} // https://www.delphipraxis.net/6620-delay.html procedure Delay(msecs: Longint); var targettime: Longint; Msg: TMsg; begin targettime := GetTickCount + msecs; while targettime > GetTickCount do if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin if Msg.message = WM_QUIT then begin PostQuitMessage(Msg.wParam); Break; end; TranslateMessage(Msg); DispatchMessage(Msg); end; end; procedure TForm1.Button1Click(Sender: TObject); var a, h, Af, U : Real; begin a:= strtofloat(Edit1.Text); h:= a/2*sqrt(3); Af := (a*a); Af := Af/4; Af := Af*sqrt(3); U := 3*a; Delay(500); Edit2.Text := floattostr(Af); Delay(500); Edit3.Text := floattostr(U); Delay(500); Edit4.Text := floattostr(h); end; end. |
AW: Ausgabe verzögern
Eine Frage bleibt. Warum sollte man solche Ausgaben verzögern?
Hat mMn keinen Sinn. Und 8-) -er wird ein Programm auch nicht wenn man große Rechenoperationen vortäuscht. |
AW: Ausgabe verzögern
Zu Demonstrationszwecken, der angewandten Formeln? Er wird schon seine Gründe haben.
|
AW: Ausgabe verzögern
Hallo,
da habe ich ja eine Diskussion losgetreten. Aber mal gleich zu den Vermutungen von @Luckie und @TiGü: es ist keine Schulaufgabe und ich bin auch nicht der Informatiklehrer. Die 72 ist das Geburtsjahr eines meiner Kinder. Da ich blutiger Anfänger bin, muss ich mich schon mal auf einfachste Aufgaben stürzen und versuchen diese dann zu erweitern. Aber nun gleich noch eine Frage, in der folgenden Prozedur muss ich irgendetwas falsch gemacht haben:
Delphi-Quellcode:
Ich bekomme immer die Fehlermeldungen
procedure TForm1.Button2Click(Sender: TObject);
var inp1, inp2,inp3, z :integer; begin inp1 := strtoint(edtinput1.Text); inp2 := strtoint(edtinput2.Text); inp3 := strtoint(edtoutput.Text); z := inp1 + inp2; if z = inp3 then edtRichtig.Visible = true else edtFalsch.visible = true end; Zitat:
MfG Ulrich |
AW: Ausgabe verzögern
Delphi-Quellcode:
= ist ein Vergleich in Delphi und := eine Zuweisung. Es muss also heißen:
edtRichtig.Visible = true
Delphi-Quellcode:
edtRichtig.Visible := true;
|
AW: Ausgabe verzögern
wenn du Anfänger bist dann lerne auch gleich eine vernünftige Einrückung. So findet man Fehler später leichter. Außerdem auf Groß- und Kleinschreibung achten.
Delphi-Quellcode:
achja. Und vernünftige Variablennamen.
z := inp1 + inp2;
if z = inp3 then edtRichtig.Visible = True else edtFalsch.visible = True // true => True // strtoint = StrToInt // inp1, inp2,inp3, z :integer; => inp1, inp2,inp3, z: Integer; |
AW: Ausgabe verzögern
Ein Vergleich in Delphi bedeutet ...
Delphi-Quellcode:
If edtRichtig.Visible = true then
Wobei man nicht auf True hin prüfen sollte sondern einfach.
Delphi-Quellcode:
If edtRichtig.Visible then
Oder
Delphi-Quellcode:
If not edtRichtig.Visible then
Du möchtest es aber zuweisen. Deshalb ...
Delphi-Quellcode:
edtRichtig.Visible := true;
Man achte auf den Unterschied! "=" und ":=" Zitat:
Delphi-Quellcode:
edtFalsch.visible = True
ist definitiv falsch! Das einzige was man bemängeln könnte wäre dieses.
Delphi-Quellcode:
inp2 = edtinput2 ist verständlich.
inp2 := strtoint(edtinput2.Text);
inp3 := strtoint(edtoutput.Text); inp3 = edtoutput unverständlich.. dann bitte so outp = edtoutput Am ende ist es aber deine Entscheidung wie du es machen möchtest da es nichts am Ergebnis ändert. (Nur zur besseren Übersicht) gruss |
AW: Ausgabe verzögern
Zitat:
|
AW: Ausgabe verzögern
Zitat:
gruss |
AW: Ausgabe verzögern
Es gehört zum schlechten Stil einfach alles entweder groß oder klein dahinzuklatschen.
Das wird sich später noch rächen wenn man mal in eine andere Sprache reingucken will und dann aus Faulheit einfach alles klein schreibt. Die deutsche Sprache hat auch Klein- und Großschreibregeln. Und nur weil man sie vernachlässigen kann, muss man das nicht. Lehrer sollten hier viel härter bewerten. |
AW: Ausgabe verzögern
Zitat:
Ich kann selbst in der IDE festlegen was ich groß oder klein schreiben will. Zum Beispiel: IF xxx = TRUE oder If xx = True. Begin..end oder BEGIN..END also gehüpft wie gesprungen das Ergebnis ist das gleiche. Hat nichts mit schlechten Stil zu tun sondern mit den Gegebenheiten wie man etwas innerhalb der IDE konfiguriert. gruss |
AW: Ausgabe verzögern
Beim nächsten mal aber bitte für eine neue Frage ein neues Thema eröffnen.
Und Rückmeldung, ob du dein Problem lösen konntest wäre auch schön. :) |
AW: Ausgabe verzögern
Hallo,
das sind viele Antworte zu meinen Problemen. @Luckie Danke für die Hilfe, es war also der vermutete Anfängerfehler. Das erste Problem mit dem Timer habe ich noch nicht so gelöst, wie ich es mir vorstelle, aber es geht vorwärts. @OLDIE1950 Das ist eine Lösung, die ich selbst nicht hingekriegt hätte, aber sie bringt mich weiter. Du schreibst also einen Prozedur, die einen Befehl ersetzt, der in Free Pascal nicht implementiert ist. Braucht man aber viel Erfahrung dazu. (Übrigens, wenn die 1950 auf dein Geburtsjahr weisen sollen, ich bin noch ein paar Jährchen älter.) @EWeiss Die unverständliche Var "outp" resultiert aus der Tatsache, dass ich auf dem gleichen Formular eine andere Variante probiert habe. In der endgültigen Fassung wird das berücksichtigt. @DieDolly Beide Bemerkungen sind zwar richtig, aber jeder fängt mal an und kann dazulernen, freundlicher wäre es auch gegangen. Der Vergleich mit der deutschen Sprache hinkt gewaltig, denn da sind Groß- und Kleinschreibung zwingend verlangt. MfG Ulrich |
AW: Ausgabe verzögern
Zitat:
Es ist mir nur aufgefallen und zur besseren späteren Lesbarkeit ist es meiner Ansicht halt besser wenn man die Variablen den Anforderungen entsprechend wählt. Inp zu Input Outp zu Output Kein Beinbruch.. war nur ein Vorschlag. gruss |
AW: Ausgabe verzögern
Ist mir klar! Habe ich auch so aufgefasst. :-D
Ulrich |
AW: Ausgabe verzögern
Einrückungen, Groß/Kleinschreibung, Variablennamen ...
Ich werfe mal den ![]() |
AW: Ausgabe verzögern
Zitat:
beim schreiben in deutsch wird aber auch nicht groß- und kleinschreibung zwingend verlangt. wenigstens explodiert hier nichts, wenn ich einfach mal nur mit den kleinen schreibe und ein jeder sollte in der lage sein, dieses kleinvieh zu lesen und zu verstehen. es sieht einfach nur ungewohnt aus und es liest sich auch nicht so flüssig. Will ich mich an die deutschen Rechtschreibregeln halten, dann kommt es sehr wohl auf die Groß- und Kleinschreibung an. Und solche "Rechtschreib"-Regeln gibt es für Delphi auch Zitat:
|
AW: Ausgabe verzögern
Vielleicht noch in Tipp zum Formatieren/einrücken:
Auch Lazarus hat einen eingebauten Formatter, zu finden unter: Source -> Jedi Code Format Oder Aufruf für das aktuelle Code-Fenster mit Ctrl+D. Der gefällt mir persönlich zwar nicht so besonders, weil er nicht so tolerant mit Syntaxfehlern umgeht (Ein Fehlerdialog nervt, einfach die Formatierung abbrechen reicht auch. Eine Fehlermeldung kann man auch in das Messages-Fenster schreiben.), aber besser als alles manuell machen ist er allemal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 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