![]() |
delay problem!
Hallo,
ich benutze folgende Code:
Delphi-Quellcode:
Fehler der angezeigt wird:
delay(1000);
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? |
Kuck mal in der Code-Library, da müßte dir geholfen werden.
|
Ja diese Funktion kenne ich ja schon aber vorhin hat Daniel B zumir gesagt, dass es auch nur mit delay geht!
|
Nein. Delay ist noch aus TP-Zeiten und die Funktion kennt der Delphi-Compiler nicht mehr.
|
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 |
Hallo,
Du hast irgendwo die Prozedur
Delphi-Quellcode:
Dein Aufruf sieht dann so aus:
procedure Delay(mSec: LongInt);
begin //bla und bla end;
Delphi-Quellcode:
Das steht dann z.B. zwischen dem begin und end irgend einer Prozedur, z.B. bei einem ButtonClick o.ä..
Delay(1000);
Die Zahl in Klammern sind Millisekunden, 1000 wäre also eine Sekunde. Grüsse, Daniel :hi: |
Wo ist das Problem?
Delphi-Quellcode:
Das kopierst du als erste Prozedur in deinen Code nach Implementation.
procedure delay(msec:longint);
var start,stop:longint; begin start := gettickcount; repeat stop := gettickcount; application.processmessages; until (stop - start ) >= msec; end; Und aufrufen tust du es mit
Delphi-Quellcode:
Die Zeit wird in Millisekunden angegeben.
Delay(1000);
|
THX!
|
Es geht aber nicht!
Normalerweise sollte er nämlich jetzt bis 0 runterählen!
Delphi-Quellcode:
Fehler wird nicht angezeigt!
for i:=0 to ending do;
begin calc:=calc-1; panel1.caption:='Noch ' + IntToStr(calc) + ' Sekunden'; i:=i+1; delay(1); end; |
: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: |
Zitat:
|
Wo muss ich das Application.ProcessMessages; einbauen?
|
Und das i:=i+1 mußt du auch weglassen...
|
Zitat:
Wo soll ich nun Application.ProcessMessages; einbauen? |
Sicher, ist ja eine for-Schleife. Mach dich mal über die Grundlagen schlau:
![]() ![]() |
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? |
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)
|
??? 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 :( |
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? |
Ja gut es geht aber immernoch net:
Delphi-Quellcode:
Eigentlich sollte er nun die Sekunden runterzählen und anzeigen aber es steht nur:
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; Noch 59 Sekunden |
Schon mal an einen Timer gedacht?
Geht wunderbar:
Delphi-Quellcode:
Bzw. so wie du es willst:
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;
Delphi-Quellcode:
Oder so:
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;
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; |
Ja der soll aber anzeigen wie viele Sekunden er NOCH drauch!
|
*push* *pop*
Kuck dir noch mal die zwei anderen Code-Schnipsel an. |
Mhh dann steht aber nur da:
Noch -1 Sekunde |
Ist getestet und bei mir zählt er brav runter. Poste mal, was du jetzt hast.
|
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; |
Frag mich bitte nicht, was da los ist. Meiner geht, deiner nicht:
Delphi-Quellcode:
Aus irgendeinen Grund wird bei dir Delay nicht richtig ausgeführt.
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; sakura hat den Unterschied gefunden: Mach das Semikolon nach dem do mal weg. :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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