PDA

View Full Version : چطوری در زمان اجرا رویداد ontimer دو تایمر را با یک متد مقدار دهی کنم؟



jandaghian
پنج شنبه 16 فروردین 1386, 11:16 صبح
سلام من یک برنامه دارم که توی اون به تعداد متغیر سراسری i تایمر در زمان اجرا create میکنم و برای رویداد ontimer هر تایمر باید یک متد خاص خود آن تایمر ایجاد بشه(یه جورایی وابسته به متغیرi (. یعنی من باید با یک متد mymethod کل ontimerهای هر تایمر را خاص خودش مقدار دهی کنم. سعی کردم این کار را با متغیر سراسری I انجام بدم. ولی نمیشه. یعنی همش تایمر آخر با بیشترین I کار میکنه.
for i:=1 to StrToInt(NumberTrain.text) do
begin
Ti:=TTimer.Create(Self);
Ti.Name:= 'Timer'+IntToStr(i);
TTimer(FindComponent('Timer'+IntToStr(i))).Interva l:=10; TTimer(FindComponent('Timer'+IntToStr(i))).OnTimer :=Mymethod; TTimer(FindComponent('Timer'+IntToStr(i))).Enabled :=True;
end;

procedure TForm1.Mymethod(sender: TObject);
begin
ShowMessage(IntToStr(i));
Label1.Caption:=((Sender as TTimer).Name);
Form1.Refresh;
end;

برنامه که اجرا میشه فقط timer2 کار میکنه و I را هم 2 میگذاره ولی من با I اینجا کار دارم. میخوام هر تایمر یه رویداد OnTimer مخصوص خودش داشته باشه و در اون رویداد OnTimer,I مربوط به timer1 برابر 1 و I مربوط به timer2 برابر 2 باشه.
کمک...لطفا!!!!!

ghabil
پنج شنبه 16 فروردین 1386, 13:22 عصر
نمیدوم داری چی کار میکنی، ولی گر دقیقا بگی میخوای چیکار کنی شاید راه راحتتری هم باشه، اما فعلا I رو Local بکن ،یعنی توی خود پروسیجر اول بزارش بعد هر تایمری که میسازی Tagش رو بزار I ، کلا هم کدت رو ایطوری بکن : (درست نیست هی Findcomponent کنی) :


with TTimer(FindComponent('Timer'+IntToStr(i))) do
begin
Interval := 10;
OnTimer := MyMethod;
Enabled := True;
Tag := i;
end;


بعدا هم تو ایونتت Tag رو بخون

jandaghian
پنج شنبه 16 فروردین 1386, 14:39 عصر
مرسی ممنون با همین tag مشکلم حل شد. flower