![]() |
Re: Welcher Timer
Danke für die zahlreichen Antworten. :)
Ich werds gleich mal ausprobieren. |
Re: Welcher Timer
Zitat:
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. |
Re: Welcher Timer
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:
Ich Lese also die Dauer bis zum nächsten Aufruf aus einer Ini und Setze das Event so...
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; Wenn ich das jetzt mache wie oben beschrieben:
Delphi-Quellcode:
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).
procedure TForm1.TimerEvent(Sender: TObject);
begin ShowMessage('Ich bin Timer: '+IntToStr(TTimer(Sender).Tag)); // Oder Sender.Tag oder auch If Sender = Timer1 ... end; /edit: Ich bin natürlich für allgemeine Tips zu Delphi oder Hinweise auf Schönheitsfehler dankbar! |
Re: Welcher Timer
1. Zähler-Variable im Zähler verwendet :warn:
Code:
2. wozu das Array - das ist doch total sinnlos
for i := [color=red]i[/color] downto 1 do
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; |
Re: Welcher Timer
Zitat:
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:
Ja, Null stand da. Zitat:
Aber danke, ich denk so wirds gehen. :) Echt nett hier das Forum! :D |
Re: Welcher Timer
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:
Ohne Timer-Array:
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;
Delphi-Quellcode:
Ohne Timer-Variable:
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;
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; |
Re: Welcher Timer
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! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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