ورود

View Full Version : سوال: اجرای روال OnStatus در یک thread



تجلی
جمعه 07 بهمن 1390, 17:30 عصر
سلام .
من چطوری میتونم روال OnStatus رو در یک Thread برای کامپوننت IdImap4 پیاده کنم؟

Mask
شنبه 08 بهمن 1390, 12:57 عصر
خوب. این شی رو در ترد جدا بسازید و مقدار Onstat ش رو دستی تنظیم کنید.

تجلی
شنبه 08 بهمن 1390, 17:48 عصر
خوب. این شی رو در ترد جدا بسازید و مقدار Onstat ش رو دستی تنظیم کنید.
من کلا برای ایجاد event ها مشکل دارم . مثلا همین رویداد onstatus توی فرم اصلی یه همچین پروسه ای رو داره >

procedure TForm1.imapStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
که وضعیت اتصال رو میشه از روی Astatus text خوند . به این شکل >
مثلا > Edit1.text:=AStatusText
حالا نمیدونم به این Astatus Text در ترید چطور میتونم دسترسی پیدا کنم.
فکر کنم الان سوال واضحتر شد .

Mask
شنبه 08 بهمن 1390, 19:56 عصر
اینجوری بنویسید.

type
TPSThread=class(TThread)
public
procedure MyOnStat(ASender: TObject; const AStatus: TIdStatus;const AStatusText: string);
protected
procedure execute; override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
PSThread:TPSThread;
begin
PSThread:=TPSThread.Create(false);
PSThread.FreeOnTerminate:=true;
PSThread.Resume;
end;

{ TPSThread }

procedure TPSThread.execute;
var Idimap4:TIdIMAP4;
begin
inherited;
Idimap4:=TIdIMAP4.Create();
with IdIMAP4 do
begin
host:='';
// .
// .
// .
OnStatus:=MyOnStat;
end;
end;

procedure TPSThread.MyOnStat(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
begin
Form1.Edit1.text:=AStatusText
end;

تجلی
یک شنبه 09 بهمن 1390, 00:14 صبح
خیلی متشکرم .
الان کاملا متوجه شدم به غیر از این که " اصطلاح inherited چه مفهوم و کاربردی داره " و در اینجا چه لزومی به استفاده ازش هست .

Mask
یک شنبه 09 بهمن 1390, 09:49 صبح
سلام.
کلمه inherited به معنی به ارث برده شده است. این رو من دستی نمینویسم. وقتی که رویداد execute یه ترد رو ایجاد میکنیم (بعد از ایجاد Type مورد نظر و زدن کلیدهای کنترل+شیفت+سی) . این کلمه به رویداد execute اضافه میشه تا کامپایلر تشخیص بده که این رویداد از کلاس TThread به ارث برده شده.(هر جاشو اشتباه گفتم اساتید مرتفع بفرمایند.)

تجلی
یک شنبه 09 بهمن 1390, 16:24 عصر
سلام.
کلمه inherited به معنی به ارث برده شده است. این رو من دستی نمینویسم. وقتی که رویداد execute یه ترد رو ایجاد میکنیم (بعد از ایجاد Type مورد نظر و زدن کلیدهای کنترل+شیفت+سی) . این کلمه به رویداد execute اضافه میشه تا کامپایلر تشخیص بده که این رویداد از کلاس TThread به ارث برده شده.(هر جاشو اشتباه گفتم اساتید مرتفع بفرمایند.)
موقع تعریف ترید که ما مشخص کردیم ، این یک ترید از کلاس Tthread هست و طبیعتا همون مشخصات رو به ارث میبره دیگه ! .
البته روی سیستم من همچین اتفاقی نمی افته من فکر میکردم شما خودت اضافش میکنی .