Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi XX min Timer mit nachfolgender Aktion (https://www.delphipraxis.net/65450-xx-min-timer-mit-nachfolgender-aktion.html)

nastytrouble 16. Mär 2006 16:22


XX min Timer mit nachfolgender Aktion
 
Also ich bin ganz neu im Gebiet von Delphi und würde gerne wissen wie man einen Timer so programmiert, dass er nach XX Minuten eine Meldung ausgibt.

ich hoffe dass ich hilfe kriege und bedanke mich mal im vorraus.

MFG Nasty

edit: geht das sonst auch anders?

fLaSh11 16. Mär 2006 16:32

Re: XX min Timer mit nachfolgender Aktion
 
Delphi-Quellcode:
var
i:Integer

//...

procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;
if i=180 then ShowMessage('3 min vorbei!');
end;

//Intervall von Timer1=1000
[edit]bei if i=... die Minuten*60 reinschreiben ;)[/edit]

nastytrouble 16. Mär 2006 16:38

ahhh danke das hilft mir weiter. aber der ist seeeehr ungenau. ich wollte das dann auchnoch so machen dass der timer losgeht wenn man klickt.
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
begin
x:=StrToInt(edit1.text)
end;
procedure TForm2.Timer1TimerTimer(Sender: TObject);
begin
i:=i+1;
if i=x then label1.caption:='zeit ist um';
end;
geht das so?

nastytrouble 16. Mär 2006 18:33

Re: XX min Timer mit nachfolgender Aktion
 
ch glaube ich bin zu dumm dafür! Bitte un HILFE!!

nastytrouble 16. Mär 2006 20:39

Re: XX min Timer mit nachfolgender Aktion
 
ok ich habe es mir mit fast 1 h recherchen selbst beantwortet.
Delphi-Quellcode:
var
  Form2: TForm2;
  i:integer;
  x:integer;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Timer1TimerTimer(Sender: TObject);
begin
  Timer1Timer.Enabled := false;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
form1.show;
form2.Hide;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
x:=StrToInt(edit1.text);
timer1timer.enabled:=true;
repeat
        begin
        i:=i+1;
        sleep(1000)
        end
until  (i=x);
if (i=x) then ShowMessage(IntToStr(x)+' sec sind vorbei');
end;
naja so lernt man mehr
ahso ich habe den timer timer1timer genannt.

Light 16. Mär 2006 21:19

Re: XX min Timer mit nachfolgender Aktion
 
Hallo nastytrouble,

Herzlich Willkommen in der Delphi-PRAXiS!

Wiso diese zweite Form??
und du machst jetz glaub ich was doppelt!
-- ich beschreib dir aufjedenfall mal ein beispiel!

Also es gibt in Delphi eine Komponente die heist TTimer
diese funktioniert so:
du setzt in der Eigenschaft Interval die zeit in millisecunden für eine secunde also 1000
und dann wenn der timer loslaufen soll stellst du die eigenschaft Enable auf true;
wenn dann die in interval angegebene zeit rum ist dann wird das ereigniss OnTime ausgelösst!
Dort kannst du dann einfach eine Meldung ausgeben!
Hier ein Beispiel:
Delphi-Quellcode:
//Der Button zum Starten des Timers
procedure TForm1.BStartClick(Sender: TObject);
Var
  Zeit : Cardinal;
Begin  
  Zeit := StrToInt(ELaenge.text);    // Der Text aus dem Edit ELaenge wird in eine Zahl umgewandelt
  Zeit := Zeit * 1000 * 60            // So wird eine Eingabe in Minuten ermöglicht
  TZeit.Interval := Zeit;            // Die Zahl wird in den Timer gesetzt
  TZeit.Enable := True;              // Der Timer wird gestartet
End;

//Der Timer TZeit bzw. dessen ereigniss OnTime
procedure TForm1.TZeiTimer(Sender: TObject);
Begin
  ShowMessage( #13 + #13 + 'DIE ZEIT IST ABGELAUFEN!' + #13 + #13); // Eine Meldung wird ausgegeben
             // ^-> die #13 sind zeilenumbrüche! dadurch wird das Meldungsfenster größer ;-)
End;

//Button um den Timer zu stoppen!
procedure TForm1.BStopClick(Sender: TObject);
Begin
  TZeit.Enable := False;       // Stoppt den Timer
End;
Wenn noch Fragen sind frag ruhig!

Liebe Grüße
Stefan alias Light

PS: In der Delphi Hilfe gibt es auch manchmal ganz praktische Beispiele! (dierekt auf einem Wort im Editor den Cursor setzen und F1 drücken ruft die hilfe für das Objekt oder die eigenschaft auf)
[edit]Hab ich vergessen: im design modus den timer auf false setzen! *G*[/edit]

nastytrouble 17. Mär 2006 14:26

XX min Timer mit nachfolgender Aktion
 
das ist nett. danke aber mit dem sleep geht es in meinem fall auch(es erfüllt immerhin seinen zweck), obwohl es das ganze prog lahm legt.
und ich habe es selbst hingekriegt! :mrgreen: :mrgreen:

fLaSh11 17. Mär 2006 15:33

Re: XX min Timer mit nachfolgender Aktion
 
zur Info, falls du mal mehr Variabeln hast funktioniert das auch so:
Delphi-Quellcode:
var
i,x,blub,zeit,min,sec,h,tag:Integer;
namen,wohnort,strasse:String;
klingel,haustuer:boolean;
//...

nastytrouble 17. Mär 2006 17:18

Re: XX min Timer mit nachfolgender Aktion
 
danke. das weiß ich aber schon. hab das jetz nur so gamacht weil ich die 2. variable später zugefügt habe und das da wieder vergessen hatte^^.

Corpsman 17. Mär 2006 17:48

Re: XX min Timer mit nachfolgender Aktion
 
Kannst es auch mit gettickcount machen

Delphi-Quellcode:
..
x:=gettickcount;
while gettickcount-180 < x do
  Application.ProcessMessages;
showmessage('3 min sind rum.');

xZise 17. Mär 2006 17:57

Re: XX min Timer mit nachfolgender Aktion
 
Zitat:

Zitat von nastytrouble
Delphi-Quellcode:
[...]

procedure TForm2.Timer1TimerTimer(Sender: TObject);
begin
  Timer1Timer.Enabled := false;
end;

// Kommentar von xZise: Kannst du auch im Deignmodus gemacht (sieht besser aus, wenn der Code länger ist)

procedure TForm2.Button1Click(Sender: TObject);
begin
form1.show;
form2.Hide;
end;

// Kommentar von xZise: o.O Kannst doch alles über Form1 laufen lassen

procedure TForm2.Button2Click(Sender: TObject);
begin
x:=StrToInt(edit1.text);
timer1timer.enabled:=true;
repeat
        begin
        i:=i+1;
        sleep(1000)
        end
until  (i=x);
if (i=x) then ShowMessage(IntToStr(x)+' sec sind vorbei');
end;

// Kommentar von xZise: Denn Timer brauchst du gar nicht mehr

So... damit du nicht verwirrt bist: "Sleep" ist unabhängig und braucht keinen Timer mehr ;)

Und ansonsten wurde das schon alles genannt!

(Tipp: Mache mal folgende kleine Änderungen:
Delphi-Quellcode:
i := i + 1 >>> inc(i)

if (i = x) then [...] >>> Interval auf X setzen (ggf. X * 1000)

nastytrouble 17. Mär 2006 18:11

Re: XX min Timer mit nachfolgender Aktion
 
naja ich habs ja jetz und mit dem gettickcount verstehe ich das garnet. und das mit der 2. form is numal so ich habe die erste schon "vollprogrammiert" bzw möchte den timer extra haben.

Corpsman 18. Mär 2006 10:15

Re: XX min Timer mit nachfolgender Aktion
 
Der Gettickcount Befehl gibt dir die Zeit in MS zurück wie lang das Betriebsystem schon gebootet ist. oder so

Ich weis nur das es sehr einfach zu Programmieren ist und sehr genau.

Bei TTimer hab ich immer das gefühl das es sehr ungenau ist und du wolltest was haben das genau ist.

nastytrouble 18. Mär 2006 13:54

Re: XX min Timer mit nachfolgender Aktion
 
kann mir das mal jmd genauer sagen wie ich das am besten einbaue. es ging ja darum dass ich einstellen konnte wieviele Min vorher ablaufen.

Corpsman 18. Mär 2006 14:51

Re: XX min Timer mit nachfolgender Aktion
 
OK Ich versuche es mal.

GetTickCount ist ne Function die einen Dword zurückgibt. Schaust du dir die größte Zahl an die Dword darstellen kanns und rechest es um weist du übrigens auch warum win nach 49 Tagen abstürzt ;)

Delphi-Quellcode:
Procedure wait(Time:Integer);
  Var x:Dword;
Begin
  Time := Time * 60; // ich gehe mal davon aus das du Time als Minuten übergibst.
  x := GetTickCount ; // Hohlen der Aktuellen Zeit.
  While x - time < GetTickCount do // Warten, aber ohne alles zu blockieren.
    Application.ProcessMessages; //Diese Zeile gibt Rechenzeit für andere Programmteiele Frei.
End;
Aufrufen tust du das ding einfach an der Codestelel wo du deine Zeit warten willst.

Delphi-Quellcode:
.. // Irgendein Code
Wait(3);// Drei minuten warten
.. // Weiter im Code

nastytrouble 18. Mär 2006 18:03

Re: XX min Timer mit nachfolgender Aktion
 
tut mir leid aber ich kucke da nur wie ein schwein ins uhrwerk. ich kann nichts damit anfangen. ich verstehe das nich. und ich habe ja schon ne methode gefunden die einigermaßen genau ist und ich auch nachvollziehen kann. danke trozdem.

ps: ich hatte meinen PC noch keine 49 Tage an.^^


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