Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi delay problem! (https://www.delphipraxis.net/3517-delay-problem.html)

smax 16. Mär 2003 19:50


delay problem!
 
Hallo,

ich benutze folgende Code:

Delphi-Quellcode:
delay(1000);
Fehler der angezeigt wird:

Undeclared identifier: 'delay'

Woran liegt das?

EDIT: So wie es aussieht kennt Delphi 6 diesen Befehl garnicht! Gibt es einen anderen der das selbe bewirkt?

Luckie 16. Mär 2003 19:53

Kuck mal in der Code-Library, da müßte dir geholfen werden.

smax 16. Mär 2003 19:54

Ja diese Funktion kenne ich ja schon aber vorhin hat Daniel B zumir gesagt, dass es auch nur mit delay geht!

Luckie 16. Mär 2003 19:57

Nein. Delay ist noch aus TP-Zeiten und die Funktion kennt der Delphi-Compiler nicht mehr.

smax 16. Mär 2003 20:01

Ok gut aber mal eine Frage zu deiner netten Funktion!

Wo gebe ich den z.B. 1 Sekunde Pause an?

Achso und warum wird in der Zeile procedure delay(msec:longint); ein Fehler angezeigt?

Und zwar:

Statement expected but 'PROCEDURE' found

Daniel B 16. Mär 2003 20:09

Hallo,

Du hast irgendwo die Prozedur
Delphi-Quellcode:
procedure Delay(mSec: LongInt);
begin
  //bla und bla
end;
Dein Aufruf sieht dann so aus:
Delphi-Quellcode:
Delay(1000);
Das steht dann z.B. zwischen dem begin und end irgend einer Prozedur, z.B. bei einem ButtonClick o.ä..
Die Zahl in Klammern sind Millisekunden, 1000 wäre also eine Sekunde.

Grüsse, Daniel :hi:

Luckie 16. Mär 2003 20:11

Wo ist das Problem?
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
    stop := gettickcount;
    application.processmessages;
  until (stop - start ) >= msec;
end;
Das kopierst du als erste Prozedur in deinen Code nach Implementation.

Und aufrufen tust du es mit
Delphi-Quellcode:
Delay(1000);
Die Zeit wird in Millisekunden angegeben.

smax 16. Mär 2003 20:13

THX!

smax 16. Mär 2003 20:22

Es geht aber nicht!

Normalerweise sollte er nämlich jetzt bis 0 runterählen!

Delphi-Quellcode:
for i:=0 to ending do;
 begin
  calc:=calc-1;
  panel1.caption:='Noch ' + IntToStr(calc) + ' Sekunden';
  i:=i+1;
  delay(1);
 end;
Fehler wird nicht angezeigt!

Daniel B 16. Mär 2003 20:36

:mrgreen:
Wärst Du so freundlich uns zu sagen was Du da machst, bzw. was Du vor hast? Was soll denn wie passieren?

Grüsse, Daniel :hi:

toms 16. Mär 2003 20:53

Zitat:

Normalerweise sollte er nämlich jetzt bis 0 runterählen!
Du musst noch ein Application.ProcessMessages;*in die Schleife einbauen, damit der Text im Label aktualisiert wird.

smax 17. Mär 2003 05:40

Wo muss ich das Application.ProcessMessages; einbauen?

janjan 17. Mär 2003 07:22

Und das i:=i+1 mußt du auch weglassen...

smax 17. Mär 2003 14:23

Zitat:

Zitat von janjan
Und das i:=i+1 mußt du auch weglassen...

Achso erhöht Delphi die i automatisch?

Wo soll ich nun Application.ProcessMessages; einbauen?

Luckie 17. Mär 2003 14:33

Sicher, ist ja eine for-Schleife. Mach dich mal über die Grundlagen schlau: www.delphi-source.de und www.delphi-treff.de

smax 17. Mär 2003 14:45

Hmm wusste ich nicht, da ich seit kanpp 3 Jahren PHP programmiere und es da so ist, dass ich es immer erhöhern muss! In Turbo Pascal auch, aber Delphi ist ja schon etwas intelligenter :D

Wo muss ich nun Application.ProcessMessages; einfügen?

janjan 17. Mär 2003 14:47

In Turbo Pascal musstest du NIE in einer For-Schleife die Zählervariable erhöhen! Dafür sind die Dinger doch schließlich da 8)

smax 17. Mär 2003 14:51

??? also ich hab TP selber nur im Informatik und beschäftige mich zuhause damit net weiter aber mein Informatik-Lehrer sagt immer das man das machen soll!

Wo soll ich nun Application.ProcessMessages; einbauen? hab schon fast alle Varianten probiert die auch nur gehen :(

Luckie 17. Mär 2003 14:55

Na innerhalb der for-Schleife.

Und das was du da über for-Schleifen und TP erzählst kann ich nicht glauben. Verwechselst du das jetzt mit einer while-Schleife?

smax 17. Mär 2003 15:04

Ja gut es geht aber immernoch net:

Delphi-Quellcode:
 if Edit1.Text < '1' then Application.MessageBox('Sie müssen eine Zahl eingeben die größer als 0 ist!','Fehler',16);
 ending:=StrToInt(Edit1.Text)*60;
 calc:=ending;
 for i:=0 to ending do;
 begin
  Application.ProcessMessages;
  calc:=calc-1;
  panel1.caption:='Noch ' + IntToStr(calc) + ' Sekunden';
  delay(1000);
 end;
Eigentlich sollte er nun die Sekunden runterzählen und anzeigen aber es steht nur:

Noch 59 Sekunden

Luckie 17. Mär 2003 15:09

Schon mal an einen Timer gedacht?

Geht wunderbar:
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
    stop := gettickcount;
    application.processmessages;
  until (stop - start ) >= msec;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to 60 do
  begin
    Application.ProcessMessages;
    Label1.Caption := IntToStr(i);
    Delay(1000);
  end;
end;
Bzw. so wie du es willst:
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
    stop := gettickcount;
    application.processmessages;
  until (stop - start ) >= msec;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, calc : Integer;
begin
  calc := 61;
  for i := 0 to 60 do
  begin
    Application.ProcessMessages;
    Dec(calc);
    Label1.Caption := IntToStr(calc);
    Delay(1000);
  end;
end;
Oder so:
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
    stop := gettickcount;
    application.processmessages;
  until (stop - start ) >= msec;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  for i := 60 downto 0 do
  begin
    Application.ProcessMessages;
    Label1.Caption := IntToStr(i);
    Delay(1000);
  end;
end;

smax 17. Mär 2003 15:17

Ja der soll aber anzeigen wie viele Sekunden er NOCH drauch!

Luckie 17. Mär 2003 15:18

*push* *pop*

Kuck dir noch mal die zwei anderen Code-Schnipsel an.

smax 17. Mär 2003 15:21

Mhh dann steht aber nur da:

Noch -1 Sekunde

Luckie 17. Mär 2003 15:24

Ist getestet und bei mir zählt er brav runter. Poste mal, was du jetzt hast.

smax 17. Mär 2003 15:39

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
if Edit1.Text < '1' then Application.MessageBox('Sie müssen eine Zahl eingeben die größer als 0 ist!','Fehler',16);
for i:=60 downto 0 do;
begin
Application.ProcessMessages;
panel1.caption:='Noch ' + IntToStr(i) + ' Sekunden';
delay(1000);
end;
end;

Luckie 17. Mär 2003 15:59

Frag mich bitte nicht, was da los ist. Meiner geht, deiner nicht:
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
    stop := gettickcount;
    application.processmessages;
  until (stop - start ) >= msec;
end;

// smax
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:= 60 downto 0 do;
begin
Application.ProcessMessages;
panel1.caption:='Noch ' + IntToStr(i) + ' Sekunden';
Delay(1000);
end;
end;

// Luckie
//procedure TForm1.Button1Click(Sender: TObject);
//var
//  i : Integer;
//begin
//  for i := 60 downto 0 do
//  begin
//    Application.ProcessMessages;
//    Panel1.Caption := 'Noch '+IntToStr(i)+' Sekunden';
//    Delay(1000);
//  end;
//end;
Aus irgendeinen Grund wird bei dir Delay nicht richtig ausgeführt.

sakura hat den Unterschied gefunden: Mach das Semikolon nach dem do mal weg. :wall:


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