Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fragen zum Timer! (https://www.delphipraxis.net/118044-fragen-zum-timer.html)

Eiskalt2 30. Jul 2008 14:55


Fragen zum Timer!
 
is delphi win32 = normales delphi 2005 ô0

Erst ma Hi und Entschuldigung falls ich des falsch gepostet hab^^

also ich programmiere noch nicht lange also bitte EINFACH erklären xD

k das Programm is eigentlich ganz einfach ( mit Delphi^^ )

geht darum n timer mit ner gewissen zeit runterlaufen zu lassen. diese gewisse zeit soll aus nem edit rausgelesen werden.

wir mach ich mir das jetzt am einfachsten?
hab schon n paar sachen ausprobiert bekomms aber nicht hin =P

schon ma danke im vorraus

lg eiskalt

mkinzler 30. Jul 2008 14:56

Re: Fragen zum Timer!
 
Wie hast du es probiert?
Schau dir mal die Eigenschaft Intervall an

helgew 30. Jul 2008 14:58

Re: Fragen zum Timer!
 
Timingsachen machst du am besten mit GetTickCount(), weil Timer über Messages laufen und nicht genau sind. Du hast einen Startwert in einem Editfeld?

Delphi-Quellcode:
uses
  math;

var
  limit: longint;


TForm1.StartButtonClick(Sender: TObject);
begin
  limit := gettickcount + StrToIntDef(Edit1.Text, 1000); // in ms
  Timer1.Interval := 100;
  Timer1.Enabled := true;
end;

TForm1.Timer1Timer(Sender :TObject);
var delta : longint;
begin
  delta:= limit - gettickcount;
  if delta < 500 then timer1.Interval := 20;
  if delta >0 then
    label1.caption := inttostr(floor(delta))+'sec verbleiben'
  else
  begin
    Timer1.Enabled := false;
    // dann hier gewünschten Code einfüllen
  end;
end;

spaxxn 30. Jul 2008 14:58

Re: Fragen zum Timer!
 
Im auf den Wert im Editfeld kannst du mit Editfeldname.Text zugreifen.
Das Timerintervall setzt man mit Timername.Interval.

Also
Delphi-Quellcode:
Timername.Interval := strtoint(Editfeldname.Text)
Timername.Enabled := true startet den Timer.

Dann musst du noch den Timerevent implementieren.
Wenn der Event aufgerufen wird, solltest du den Timer am Anfang stoppen und am Ende wieder starten.

Eiskalt2 30. Jul 2008 15:08

Re: Fragen zum Timer!
 
spaxxn antwort sagt mir mehr

sry gelgew^^

ich probs ma

taaktaak 30. Jul 2008 15:13

Re: Fragen zum Timer!
 
... und bitte sicherstellen, dass im Editfeld auch ein Integer eingegeben wurde! Alternativ z.B. mit TryStrToInt() arbeiten und den Intervall nur setzen, wenn erfolgreich Konvertiert werden konnte :hi:

helgew 30. Jul 2008 15:13

Re: Fragen zum Timer!
 
Hi,

du wolltest doch einen timer herunterzählen lassen. Nun starte ein Programm mit höherer Priorität, welches viele Ressourcen zieht und du wirst sehen, dass der Timer langsamer wird. Abhängig davon, was du brauchst, kann das vollkommen inakzeptabel sein. Mein Codebeispiel, was ich mir gerade für dich aus den Fingern gesaugt hab, koppelt das Zählen vom eigentlichen timer ab und vergleicht mit der Systemuhr. Wenn dein Problem schon darin besteht, den timer zu initialisieren, schaust du dir am besten an, was timer1.enabled macht und wie sich das intvervall auf den timer auswirkt.

greeds

ps. TryStrToInt wird wohl gleichwertig sein mit StrToIntDef(edit1.text, -1 ) und der anschließenden Prüfung auf einen semipositiven Wert.

spaxxn 30. Jul 2008 15:16

Re: Fragen zum Timer!
 
@helgew: Ich glaube, dass es im erstmal nur um das Verständnis geht. Du schiesst ja gleich mit Artillerie auf Spatzen.

taaktaak 30. Jul 2008 15:19

Re: Fragen zum Timer!
 
@helgew: Mein Hinweis bezog sich auf Post#4. Dort wird nur StrToInt() verwendet. Das in deinem Code enthaltene StrToIntDef() habe ich erst durch deinen Hinweis "kennen gelernt" :oops: - vielen Dank! Man lernt nie aus!

Eiskalt2 30. Jul 2008 15:45

Re: Fragen zum Timer!
 
soll ich das intervall im timer an sich erst ma auf " 1 " stellen oder ist das erst ma egal, da er sobald der timer aktiviert wird (per button), n neues intervall bekommt.


edit: fehler meldung kommt nach 0,5 sec oder so nachem ich das programm laufen lass

Im Projekt Project1.exe ist eine Exception der Klasse EConvertError mit der Meldung "ist kein guültiger Integerwert" aufgetreten.

taaktaak 30. Jul 2008 15:53

Re: Fragen zum Timer!
 
Was du im OI einträgst ist egal, wenn du dort den Timer zunächst deaktivierst und erst im Programmablauf startest. Zur Fehlermeldung: Ist wohl angeraten, mal den relevanten Code zu zeigen...

Eiskalt2 30. Jul 2008 16:24

Re: Fragen zum Timer!
 
sry wusste nicht wie ich das verkleinert reinstelle bzw. ab wo es relavant is =P

und die meldung kommt bevor ich i-was in das edit reinschreib

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Timer1: TTimer;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Timer5: TTimer;
    Timer6: TTimer;
    Timer7: TTimer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer2.Enabled := true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Timer3.Enabled := true;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Timer4.Enabled := true;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  Timer5.Enabled := true;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  Timer6.Enabled := true;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  Timer7.Enabled := true;
end;
 MÜSSTE DARAN LIEGEN //
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  timer1.Interval := strtoint(edit1.Text)
end;
//
end.
[edit=Matze][delphi]-Tags eingefügt. Zukünftig bitte selbst daran denken. MfG, Matze[/edit]

taaktaak 30. Jul 2008 16:33

Re: Fragen zum Timer!
 
Aha, ist das der gesamte Source von Unit1?

Hm, also, wo wollen wir da anfangen? Es gibt da einiges Merkwürdige. Du hast 7 Timer und schaltest 6 davon per Button an - es sind aber keine TimerEventProcs 2..6 zu entdecken. Den Timer 1 aktivierst du im FormOnCreate? Ist zu diesem Zeitpunkt überhaupt etwas im Editfeld? bzw. (Frage an mich selbst:) steht das Editfeld zu diesem Zeitpunkt überhaupt schon zur Verfügung?

PS: Bitte die Delphitags benutzen und den Code einrücken - ist dann leichter zu lesen!

Eiskalt2 30. Jul 2008 16:43

Re: Fragen zum Timer!
 
morgen gehts weiter muss sry bb^^

helgew 31. Jul 2008 10:50

Re: Fragen zum Timer!
 
Na, kommst du zurecht?

Ich hätte noch einen Vorschlag, wenn das dir zuviele timerobjekte werden:
Delphi-Quellcode:
var
   timers : Array [0..10] of TTimer;


procedure TForm1.FormCreate(Sender: TObject);
begin
  for i := 0 to 10 do
  begin
    timers[i] := TTimer.Create(form1);
    timers[i].OnTimer := AllTimerEvent;
    timers[i].Tag := i;
  end;
end;

procedure TForm1.AllTimerEvent(Sender:TObject);
begin
  Case (Sender as TTimer).Tag of
    0:
    1:
    2:
   // ...
  end;

end;


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