AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Welcher Timer

Ein Thema von ThunderX86 · begonnen am 5. Apr 2004 · letzter Beitrag vom 6. Apr 2004
Antwort Antwort
Seite 2 von 2     12   
ThunderX86

Registriert seit: 4. Apr 2004
Ort: Wien
9 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Welcher Timer

  Alt 5. Apr 2004, 22:29
Danke für die zahlreichen Antworten.
Ich werds gleich mal ausprobieren.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#12

Re: Welcher Timer

  Alt 5. Apr 2004, 22:31
Zitat von himitsu:
[OT]Na dann schämm dich [/OT]
Ja, reit' nur auf mir rum.
Nicht genug daß ich wegen diverser Ablenkungen zwei Minuten zu spät gepostet habe und nicht alle paarhundert Klassen auswendig kann, jetzt stellt sich auch noch die ganze DP-Gemeinde gegen mich. Toll, mein Ego ist am Boden zerstöert.
  Mit Zitat antworten Zitat
ThunderX86

Registriert seit: 4. Apr 2004
Ort: Wien
9 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Welcher Timer

  Alt 5. Apr 2004, 22:48
Bisher funktionieren leider alle Lösungen nicht.

Liegt aber sicher an der Art wie ich die Timer erstelle... ich muss sie nämlich erstellen wärend das Programm läuft, und das mache ich so:

Delphi-Quellcode:
procedure TForm1.CreateTimers(Sender: TObject);

var
  TimerArray: ARRAY OF TTimer;
  i, j: Integer;
  
begin

  SetLength(Timerarray, 0);

  frconfig := TIniFile.Create(ExtractFilePath(ParamStr(0))+'frconfig.ini');
  i := frconfig.ReadInteger('Counter', 'Foren', 0);

  j := i-1;
  SetLength(TimerArray, i);
  for i := i downto 1 do
    begin
      TimerArray[j] := TTimer.Create(nil);
      TimerArray[j].Interval := frconfig.ReadInteger('Foren', 'Timer'+IntToStr(i), 0);
      TimerArray[j].Enabled := true;
      TimerArray[j].OnTimer := TimerEvent;
      j := j-1;
    end;


end;
Ich Lese also die Dauer bis zum nächsten Aufruf aus einer Ini und Setze das Event so...

Wenn ich das jetzt mache wie oben beschrieben:

Delphi-Quellcode:
procedure TForm1.TimerEvent(Sender: TObject);
begin
  ShowMessage('Ich bin Timer: '+IntToStr(TTimer(Sender).Tag)); // Oder Sender.Tag oder auch If Sender = Timer1 ...
end;
Dann bekomme ich nur Fehler... entweder kennt der das "Tag" nicht oder es kommen andere Fehlermeldungen (Wenn ich das so aufbaue dass variable j geschickt wird).

/edit: Ich bin natürlich für allgemeine Tips zu Delphi oder Hinweise auf Schönheitsfehler dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#14

Re: Welcher Timer

  Alt 6. Apr 2004, 00:27
1. Zähler-Variable im Zähler verwendet
Code:
for i := [color=red]i[/color] downto 1 do
2. wozu das Array - das ist doch total sinnlos

3. bei mir geht's - bei dir sollte es aber zumindestens "0" anzeigen - da du's ja nicht zugewiesen hast
PS: du solltest Tag natürlich auch festlegen

Delphi-Quellcode:
Type TForm1 = Class(TForm)
    ...
  Private
    Procedure TimerEvent(Sender: TObject);
  End;


Procedure TForm1.CreateTimers(Sender: TObject);
  Var Timer: TTimer;
    frconfig: TIniFile; // sowas sollte man doch eher lokal definieren
    i, j: Integer;
 
  Begin
    frconfig := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'frconfig.ini');
      i := frconfig.ReadInteger('Counter', 'Foren', 0);
      For j := 1 to i do Begin
        Timer := TTimer.Create(Form1); // wegen der Freigabe macht es sich besser, das Objekt irgendwo zuzuordnen (am einfachsten dem Formular)
        Timer.Interval := frconfig.ReadInteger('Foren', 'Timer' + IntToStr(j), 0);
        Timer.Tag := j; // einen Wert für Tag festlegen
        Timer.Enabled := true;
        Timer.OnTimer := TimerEvent;
      End;
    frconfig.Free; // Freigeben sollte man die Datei natürlich auch
  End;

Procedure TForm1.TimerEvent(Sender: TObject);
  Begin
    ShowMessage('Ich bin Timer: ' + IntToStr(TTimer(Sender).Tag));
  End;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
ThunderX86

Registriert seit: 4. Apr 2004
Ort: Wien
9 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Welcher Timer

  Alt 6. Apr 2004, 01:11
Zitat von himitsu:
1. Zähler-Variable im Zähler verwendet
Code:
for i := [color=red]i[/color] downto 1 do
2. wozu das Array - das ist doch total sinnlos
Hm... jo da war ich zu dumm, hab ned gewusst wie ich das am besten mach und da ich ja einen wert zuweisen muss...
Array hab ich aus dem Grund verwendet weil ich ja später von über all drauf zugreifen will, woher weiß ich jetzt in welcher Variable der Timer ist? Ich brauch ja nicht nur einen sondern mehrere... wenn ich da nur hab Timer als eine Variable, wie soll ich der mehrere Timer geben? Das is doch irgendwie unlogisch oder?

/edit: Ich hab ja auch eine Bearbeitungsfunktion, und wenn ich da in der Ini den Zeitwert ändere, muss ich ihn gleich danach wärend das Programm läuft noch beim Timer direkt ändern... wie sollte ich den betroffenen Timer sonst ansprechen?

Zitat von himitsu:
3. bei mir geht's - bei dir sollte es aber zumindestens "0" anzeigen - da du's ja nicht zugewiesen hast
PS: du solltest Tag natürlich auch festlegen
Jetzt weiß ich wieso das nicht ging, wenn ich den Tag nicht definier kann da ja nix sein...
Ja, Null stand da.

Zitat von himitsu:
Delphi-Quellcode:
Procedure TForm1.CreateTimers(Sender: TObject);
  Var Timer: TTimer;
    frconfig: TIniFile; // sowas sollte man doch eher lokal definieren
    i, j: Integer;
Hab gelernt dass man die Ini Global machen sollte wenn man sie öfter braucht.

Aber danke, ich denk so wirds gehen.
Echt nett hier das Forum!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#16

Re: Welcher Timer

  Alt 6. Apr 2004, 15:35
Es geht in diesem Fall auch mit nur einer Variable, da es sich hier nur um einen Zeiger auf den mit TTimer.Create(Form1) erstellten Timer.

OK, wenn du später drauf zugreifen willst, dann sollte natürlich das Array für die Timer Global definiert sein, oder du greifst nicht über die Zeiger in einem Timer-Array zu, sondern läßt dir den entsprechenden Timer suchen.

Das mit der INI: Wenn du es so gelernt hast, dann mach es halt so - Delphi ist ja flexiebel und es gibt ja mehrere Möglichkeiten, die nicht unbedingt Falsch sind ^^


Über ein Timer-Array:
Delphi-Quellcode:
Type TForm1 = Class(TForm)
    ...
  Private
    Procedure TimerEvent(Sender: TObject);
  End;

Var Timer: Array of TTimer;


Procedure TForm1.CreateTimers(Sender: TObject);
  Var frconfig: TIniFile;
    i, j: Integer;

  Begin
    frconfig := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'frconfig.ini');
      i := frconfig.ReadInteger('Counter', 'Foren', 0);
      SetLength(Timer, i);
      For j := 1 to i do Begin
        Timer[i - 1] := TTimer.Create(Form1);
        Timer[i - 1].Interval := frconfig.ReadInteger('Foren', 'Timer' + IntToStr(j), 0);
        Timer[i - 1].Tag := j;
        Timer[i - 1].Enabled := True;
        Timer[i - 1].OnTimer := TimerEvent;
      End;
    frconfig.Free;
  End;

Procedure TForm1.TimerEvent(Sender: TObject);
  Begin
    ShowMessage('Ich bin Timer: ' + IntToStr(TTimer(Sender).Tag));
  End;

Procedure ...
  Begin
    Timer[0].Enabled := False; // Timer1
    Timer[1].Enabled := False; // Timer2
  End;
Ohne Timer-Array:
Delphi-Quellcode:
Type TForm1 = Class(TForm)
    ...
  Private
    Procedure TimerEvent(Sender: TObject);
  End;


Procedure TForm1.CreateTimers(Sender: TObject);
  Var frconfig: TIniFile;
    Timer: TTimer;
    i, j: Integer;

  Begin
    frconfig := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'frconfig.ini');
      i := frconfig.ReadInteger('Counter', 'Foren', 0);
      SetLength(Timer, i);
      For j := 1 to i do Begin
        Timer := TTimer.Create(Form1);
        Timer.Name := 'Timer' + IntToStr(j);
        Timer.Interval := frconfig.ReadInteger('Foren', 'Timer' + IntToStr(j), 0);
        Timer.Tag := j;
        Timer.Enabled := True;
        Timer.OnTimer := TimerEvent;
      End;
    frconfig.Free;
  End;

Procedure TForm1.TimerEvent(Sender: TObject);
  Begin
    ShowMessage('Ich bin Timer: ' + IntToStr(TTimer(Sender).Tag));
  End;

Procedure ...
  Var Timer: TTimer;

  Begin
    Timer := TTimer(Form1.FindComponent('Timer' + IntToStr(1)));
    Timer.Enabled := False; // Timer1
    {oder}
    TTimer(Form1.FindComponent('Timer' + IntToStr(2))).Enabled := False; // Timer2
  End;
Ohne Timer-Variable:
Delphi-Quellcode:
Type TForm1 = Class(TForm)
    ...
  Private
    Procedure TimerEvent(Sender: TObject);
  End;


Procedure TForm1.CreateTimers(Sender: TObject);
  Var frconfig: TIniFile;
    i, j: Integer;

  Begin
    frconfig := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'frconfig.ini');
      i := frconfig.ReadInteger('Counter', 'Foren', 0);
      SetLength(Timer, i);
      For j := 1 to i do
        With TTimer.Create(Form1) do Begin
          Name := 'Timer' + IntToStr(j);
          Interval := frconfig.ReadInteger('Foren', 'Timer' + IntToStr(j), 0);
          Tag := j;
          Enabled := True;
          OnTimer := TimerEvent;
        End;
    frconfig.Free;
  End;

Procedure TForm1.TimerEvent(Sender: TObject);
  Begin
    ShowMessage('Ich bin Timer: ' + IntToStr(TTimer(Sender).Tag));
  End;

Procedure ...
  Var Timer: TTimer;

  Begin
    Timer := TTimer(Form1.FindComponent('Timer' + IntToStr(1)));
    Timer.Enabled := False; // Timer1
    {oder}
    TTimer(Form1.FindComponent('Timer' + IntToStr(2))).Enabled := False; // Timer2
  End;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
ThunderX86

Registriert seit: 4. Apr 2004
Ort: Wien
9 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Welcher Timer

  Alt 6. Apr 2004, 17:10
Danke für die Hilfe, klingt alles einleuchtend.
Nur muss ich mein Prog nochmal neu Anfangen (saß jetzt 3 Tage dran, aber da ich mich jetzt "auskenne" sollte ich das in ein paar Stunden schaffen) weil ich zu viele Fehler durch ausprobieren eingebaut habe.

Ich hoffe dass ich das jetzt schaffe, THX!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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