Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Mit Button-Click Alle Timer ausschalten?


BoerseMan79 - Fr 14.12.12 18:17
Titel: Mit Button-Click Alle Timer ausschalten?
Gibt es eine Möglichkeit auf alle Komponente eines Typs zu zugreifen ohne es mit Findcomponent und for-Schleife zu realisieren?
Also ich habe 17 Timer mit verschiedenen Namen: (Timer1, Timer2, Timer3, AutoSetTimer, LeftTimer, RightTimer, ...)
Ich will die auf einen Schlag alle ausschalten (Pause-Button) und dann wieder starten (Resume-Button)


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 14.12.2012 um 23:00


Gausi - Fr 14.12.12 18:41

17 Timer sind vermutlich eh zuviel. ;-)

Ansonsten: pack die Timer im FormCreate in ein Array of TTimer und mach dann eine for-Schleife über dieses Array.


hansa - Fr 14.12.12 19:05

Einfacher gehts wohl kaum :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to Componentcount - 1 do begin
    if Components [i] is TTimer then
      (Components [i] as TTimer).enabled := false; // Interval := 0; usw.
  end;
end;


Aber ohne For-Schleife oder gar Variablen geht mit Delphi nix. Doch : "Hallo Welt" - Programm. Das kriegt man fast ohne alles hin. :mrgreen:


WasWeißDennIch - Sa 15.12.12 08:57

Doppelt gemoppelt :), as enthält bereits die is-Prüfung, daher kann man auch hart casten, wenn man schon weiß, was man vor sich hat.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to Componentcount - 1 do begin
    if Components [i] is TTimer then
      TTimer(Components[i]).enabled := false;
  end;
end;

Man muss aber dabei auch bedenken, dass man damit alle Timer, deren Owner man ist, deaktiviert. Will man gezielt nur eine bestimmte Gruppe ansprechen, empfiehlt es sich, diese in ein Array oder eine Liste zu packen und dann darüber zu iterieren, wie Gausi bereits erwähnt hat.


bummi - Sa 15.12.12 12:43

Ich bin ja keine Freund von den Jedi's und von vielen Timern, wenn es bei Dir anders ist kannst Du auch eine JvTimerlist verwenden.


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm6.Button1Click(Sender: TObject);
begin
  JvTimerList1.Active := not JvTimerList1.Active;
end;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


Der Schreckliche - So 16.12.12 20:13

Fehler! von mir