Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Ausgabe verzögern (https://www.delphipraxis.net/198323-ausgabe-verzoegern.html)

ulrich72 24. Okt 2018 10:25

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:
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;
Genutzt wird Lazarus Version 1.8.4

vG
Ulrich

Schokohase 24. Okt 2018 10:27

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.

Der schöne Günther 24. Okt 2018 10:28

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.

Luckie 24. Okt 2018 10:29

AW: Ausgabe verzögern
 
Ganz simpel wäre ein Sleep. Nur ist dann so lange die Oberfläche nicht bedienbar.

API 24. Okt 2018 16:51

AW: Ausgabe verzögern
 
Zitat:

Zitat von Luckie (Beitrag 1416503)
Ganz simpel wäre ein Sleep. Nur ist dann so lange die Oberfläche nicht bedienbar.

Sleep einfach kombininieren mit einem Application.ProcessMessages

Delphi-Quellcode:

  procedure ResponsiveSleep(SleepTime: LongInt);
  Var
    FinalTick : QWord;
  begin
    FinalTick := GetTickCount64 + SleepTime;
    while GetTickCount64 < FinalTick do
    begin
      Sleep(10);
      Application.ProcessMessages;
    end;
  end;

DieDolly 24. Okt 2018 16:53

AW: Ausgabe verzögern
 
Zitat:

Sleep einfach kombininieren mit einem Application.ProcessMessages
Kann man machen. Aber ProcessMessages ist meiner Meinung nach etwas, was man mit Bedacht nutzen sollte.
Dann doch lieber die Arbeit in einen Thread auslagern und dort Sleep nutzen.

Der schöne Günther 24. Okt 2018 16:59

AW: Ausgabe verzögern
 
Zitat:

Zitat von API (Beitrag 1416576)
Sleep einfach kombininieren mit einem Application.ProcessMessages

Nein, bitte nicht.

API 24. Okt 2018 17:22

AW: Ausgabe verzögern
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1416578)
Zitat:

Zitat von API (Beitrag 1416576)
Sleep einfach kombininieren mit einem Application.ProcessMessages

Nein, bitte nicht.


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.

Der schöne Günther 24. Okt 2018 17:32

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 ;-)

Luckie 24. Okt 2018 18:43

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.

TiGü 24. Okt 2018 19:44

AW: Ausgabe verzögern
 
Plot Twist: Uli ist der Informatiklehrer!:-D

OLDIE1950 24. Okt 2018 20:00

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.

DieDolly 24. Okt 2018 20:25

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.

Luckie 24. Okt 2018 20:41

AW: Ausgabe verzögern
 
Zu Demonstrationszwecken, der angewandten Formeln? Er wird schon seine Gründe haben.

ulrich72 27. Okt 2018 19:05

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:
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;
Ich bekomme immer die Fehlermeldungen

Zitat:

unit1.pas(61,5) Error: Illegal expression
unit1.pas(63,1) Error: Illegal expression
Wo liegt mein Fehler, ich vermute einen simplen Anfängerfehler. Übt Nachsicht mit einem Wissbegierigen Opa und helft ihm auf die Sprünge!
MfG
Ulrich

Luckie 27. Okt 2018 19:14

AW: Ausgabe verzögern
 
Delphi-Quellcode:
edtRichtig.Visible = true
= ist ein Vergleich in Delphi und := eine Zuweisung. Es muss also heißen:

Delphi-Quellcode:
edtRichtig.Visible := true;

DieDolly 27. Okt 2018 19:16

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:
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;
achja. Und vernünftige Variablennamen.

EWeiss 27. Okt 2018 19:18

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:

wenn du Anfänger bist dann lerne auch gleich eine vernünftige Einrückung.
Wenn du ihm schon Vorschläge machst dann bitte auch mit der Korrektur.
Delphi-Quellcode:
edtFalsch.visible = True


ist definitiv falsch!

Das einzige was man bemängeln könnte wäre dieses.
Delphi-Quellcode:
inp2 := strtoint(edtinput2.Text);
inp3 := strtoint(edtoutput.Text);
inp2 = edtinput2 ist verständlich.
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

Luckie 27. Okt 2018 19:18

AW: Ausgabe verzögern
 
Zitat:

Zitat von DieDolly (Beitrag 1416906)
Außerdem auf Groß- und Kleinschreibung achten.

Da Delphi nicht case-sensitive ist, ist was man wie groß oder klein schreibt reine Geschmackssache.

EWeiss 27. Okt 2018 19:20

AW: Ausgabe verzögern
 
Zitat:

Zitat von Luckie (Beitrag 1416909)
Zitat:

Zitat von DieDolly (Beitrag 1416906)
Außerdem auf Groß- und Kleinschreibung achten.

Da Delphi nicht case-sensitive ist, ist was man wie groß oder klein schreibt reine Geschmackssache.

Dito! ;)

gruss

DieDolly 27. Okt 2018 19:21

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.

EWeiss 27. Okt 2018 19:24

AW: Ausgabe verzögern
 
Zitat:

Zitat von DieDolly (Beitrag 1416911)
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.

Ach sorry das ist Quatsch!
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

Luckie 27. Okt 2018 19:50

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. :)

ulrich72 28. Okt 2018 08:43

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

EWeiss 28. Okt 2018 09:04

AW: Ausgabe verzögern
 
Zitat:

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.
Wie ich schon sagte es ist allein deine Entscheidung. ;)
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

ulrich72 28. Okt 2018 09:06

AW: Ausgabe verzögern
 
Ist mir klar! Habe ich auch so aufgefasst. :-D

Ulrich

Jasocul 29. Okt 2018 06:28

AW: Ausgabe verzögern
 
Einrückungen, Groß/Kleinschreibung, Variablennamen ...

Ich werfe mal den Delphi-Styleguide hier rein.

Schokohase 29. Okt 2018 08:42

AW: Ausgabe verzögern
 
Zitat:

Zitat von ulrich72 (Beitrag 1416960)
Der Vergleich mit der deutschen Sprache hinkt gewaltig, denn da sind Groß- und Kleinschreibung zwingend verlangt.

Die deutsche Sprache verlangt nach keinerlei, denn wenigstens ich kann nicht heraushören ob mein Gegenüber das Gesagte in Groß- oder Kleinschreibung gesagt hat.

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:

Zitat von Jasocul (Beitrag 1416995)

Ich glaube auch nicht das es so böse gemeint war, wie es bei dir angekommen ist. Nimm es als gut gemeinten Rat, denn ein ordentlich formatierter und geschriebener Code (PascalCase) hilft bei der Vermeidung einiger Fehler (nicht aller!).

dummzeuch 29. Okt 2018 10:48

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 02:37 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