Fórum Criar componente dinamicamente e atribur procedure e passar um parametro. #6447
03/06/2009
0
var
time, I, T: Integer;
meuTime: TTimer;
ETime: array[0..20, 0..20] of string;
var
configs: TIniFile; begin
Configs := TIniFile.Create(ExtractFilePath(Application.ExeName) + '.\Configuracoes.ini');
T := StrToInt(configs.readString('NTIMES', 'QUANTIDADE', ''));
Time := 0; for i := 0 to T - 1 do
begin
name := 'meuTime' + Inttostr(i);
meuTime := TTimer.Create(self);
Time := Time + 1000;
meuTime.Enabled := True;
meutime.Interval := 1000 * 60 * StrToInt(configs.readString('TIMES', name, '')); meuTime.Tag := StrToInt(configs.readString('meuTime.Tag', name, ''));
meutime.OnTimer := Button1.OnClick;
meuTime.Name := name;
ETime[i, i] := name; end; configs.Free; end;
Att.. Ricardo Horoi
Frigorifico Sa
Curtir tópico
+ 0Posts
03/06/2009
Rodrigo Mourão
Vamos lá, para associar um procedure a um evento ele tem que ter a assinatura do evento, ou seja, se o evento é padrão então a assinatura é: procedure Nome(Sender: TObject), se o evento for de tecla então seria procedure Nome(Sender: Tobject; Key: Char).
Enfim, basta criar uma procedure com um parametro do tipo TObject.Então no seu porjeto cria uma função como o exemplo abaixo:
procedure Execute(Sender: TObject);
Agora a sua rotina ficara assim:
procedure TFormIntegrador.CriarTime;
var
time, I, T: Integer;
meuTime: TTimer;
ETime: array[0..20, 0..20] of string;
var
configs: TIniFile; begin
Configs := TIniFile.Create(ExtractFilePath(Application.ExeName) + '.\Configuracoes.ini');
T := StrToInt(configs.readString('NTIMES', 'QUANTIDADE', ''));
Time := 0; for i := 0 to T - 1 do
begin
name := 'meuTime' + Inttostr(i);
meuTime := TTimer.Create(self);
Time := Time + 1000;
meuTime.Enabled := True;
meutime.Interval := 1000 * 60 * StrToInt(configs.readString('TIMES', name, '')); meuTime.Tag := StrToInt(configs.readString('meuTime.Tag', name, ''));
meutime.OnTimer := Execute;
meuTime.Name := name;
ETime[i, i] := name; end; configs.Free; end;
Agora vem o pulo do gato. Imagine que dependendo do tag do timer que chamou o evento vc faco algo diferente, então basta fazer como no exemplo abaixo:
procedure Execute(Sender: TObject);
begin
case TTimer(Sender).tag of
1: facoalgoaqui;
2: facoalgoaqui;
3: facaalgoaqui;
end;
Como vc fez um method pointer com o TTimer la em cima, quando o evento for chamado o sender recebe o componente que chamou o evento, ou seja, o timer. Entao fazemo um type cast e pegamos o tag.
Abs !!!
Gostei + 0
04/06/2009
Frigorifico Sa
Gostei + 0
04/06/2009
Rodrigo Mourão
Abs!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)