Autor Beitrag
BoerseMan79
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 14.12.12 19:17 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 14.12.12 19: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.

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: maxet
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 14.12.12 20:05 
Einfacher gehts wohl kaum :

ausblenden 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:

_________________
Gruß
Hansa

Für diesen Beitrag haben gedankt: BoerseMan79
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Sa 15.12.12 09: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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 15.12.12 13: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.

ausblenden 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

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Der Schreckliche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: So 16.12.12 21:13 
Fehler! von mir