PDA

View Full Version : ایجاد تایمر در یک کلاس



behzad_taheri20
شنبه 29 تیر 1387, 06:21 صبح
سلام دوستان ، خسته نباشید

چگونه می توان یک تایمر در یک کلاس داشته باشیم که تابع تایمر بتواند به توابع و متغیرهای کلاس دسترسی داشته باشد.

ممنونم

amin_alexi
شنبه 29 تیر 1387, 11:03 صبح
سلام
منظور از تایمر چیه ؟ همون Timer خوده دلفی ؟
منظور از تابع تایمر همون رویداد OnTimer از Timer دلفی ؟
اگه آره که اینها وقتی یکTimer رو فرم میزاری در رویداد OnTimer به تمام متغییر های درون Class دسترسی دارند . حالا مگر اینکه یک کلاس دیگه یا یک تایمر دیگه ای مد نظرت باشه که بهتره کد کلاس رو هم بزاری و بگی چه تایمری رو میگی !؟

behzad_taheri20
شنبه 29 تیر 1387, 14:26 عصر
سلام دوست عزیزم ممنونم از پاسخت
من یک کلاس غیر از کلاس فرم دارم و تایمر استاندارد دلفی را در runtime ایجاد می کنم
مشکل من این است که اگر شیئی از کلاس فوق را در تردی فراخوانی کنم تایمر اجرا نمی شود ولی اگر در ترد اصلی برنامه اجرا کنم مشکلی پیش نمی آید

به عنوان مثال :
دو برنامه فوق را ضمیمه می کنم ، ممنون میشم اگه کمک کنید.

Hsimple11
شنبه 29 تیر 1387, 15:34 عصر
کلاس timer خود را چگونه تعریف کرده اید و متدها و Property های آن را در چه بخشی؟

behzad_taheri20
شنبه 29 تیر 1387, 20:41 عصر
سلام Hsimple11 عزیز و دیگر دوستان
خسته نباشید
اگر لطف کنید مثال timer2 در بالا را نگاه کنید ، مشکل من را کاملا میبینید.
پیشاپیش از لطفتون ممنونم

Hamid_PaK
یک شنبه 30 تیر 1387, 09:37 صبح
وقتی از ترد استفاده میکنید برای شبیه سازی تایمر میتوانید بسادگی از یک حلقه بینهایت و Sleep جهت تاخیر استفاده کنید.
برای دسترسی به کلاس اول متد را در کلاس اول تعریف کرده و آن را در کلاس دوم استفاده کنید:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure myTimer(Sender: TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.myTimer(Sender: TObject);
begin
ShowMessage('Ok');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
A:MyClass;
begin
A:=A.Create;
A.OnInterval := myTimer;
end;

end.

تنها در کلاس دوم یک Property تعریف کنید و OnInterval را از کلاس دوم دریافت کنید.

یا حق ...

behzad_taheri20
دوشنبه 31 تیر 1387, 18:12 عصر
سلام حمید جان ممنون از راهنماییت ولی خاصیتی که تایمر استاندارد دارد حالت eventی آن است که باعث قفل شدن برنامه نمی شود ، و من بیشتر این خاصیت را میخواهم
ممنون میشم اگه خطای برنامه ضمیمه شده در بالا(timer2) را حل کنید
باز هم از لطف شما و بقیه دوستان تشکر می کنم

Hamid_PaK
دوشنبه 31 تیر 1387, 19:38 عصر
شما دارید از ترد استفاده می کنید ترد بدلیل اینکه از ترد اصلی برنامه جداست هیچگاه باعث قفل شدن برنامه نخواهد شد.

یا حق ...

behzad_taheri20
سه شنبه 01 مرداد 1387, 06:35 صبح
سلام حمید جان
من ترد را هم نمی خواهم در یک فانکشن قفل شود

Hamid_PaK
سه شنبه 01 مرداد 1387, 08:41 صبح
سلام حمید جان
من ترد را هم نمی خواهم در یک فانکشن قفل شود

متوجه منظورتون نشدم.

یا حق ...