ورود

View Full Version : ارسال پیام شخصی ( مسنجر )



یاسر مددیان
جمعه 01 تیر 1386, 21:17 عصر
سلام
من دارم یه مسنجر طراحی می کنم. تو قسمت ارسال پیام شخصی گیر کردم. مثلا یاهو رو در نظر بگیرین ، وقتی چند نفر براتون PM می فرستن تو چند تا فرم جداگونه باز میشه.
برای این کار باید تو زمان اجرا فرم بسازیم. حالا چطور برای مثلا یک دکمه که تو زمان اجرا میسازیم رویداد تعریف کنیم ؟
اصلاً راه اصولی برای فرستادن پیام شخصی چیه ؟ آیا این راه درسته ؟
آیا راهی وجود داره که ما یه Form در دلفی بسازیم و چند تا از این فرم را باز کنیم ؟( دیگه زمان اجرا فرم نسازیم ؟ )


با تشکر

Inprise
جمعه 01 تیر 1386, 21:29 عصر
یک کلاس از TForm مشتق کن . کنترلهات رو روش بگذار و رخداد گردان مورد نظرت رو بنویس ، در زمان اجرا وقتی سوکت درخواستی رو دریافت کرد یک نسخه جدید از اون کلاس بساز و مشخصات مورد نظرت رو روش تنظیم کن . در حقیقت وقتی داری یک برنامه ساده مینویسی مشغول انجام همینکارها هستی . کافیه کمی بهشون دقت کنی .

یاسر مددیان
جمعه 01 تیر 1386, 21:35 عصر
این کار رو کردم یه کلاس از TForm مشتق کردم. چینشهای کنترل ها رو روش انجام دادم. اما نتونستم واسه یه کنترل رویداد تعریف کنم ؟
مثلاً واسه فرم OnCreate تعریف کنم و یه تیکه کد توش بذارم یا واسه Button نتونستم OnClick تعریف کنم و کدهام و توش بذارم.

ممنون میشم اگه کمک کنید.

Mahmood_M
شنبه 02 تیر 1386, 00:05 صبح
مثلاً واسه فرم OnCreate تعریف کنم و یه تیکه کد توش بذارم یا واسه Button نتونستم OnClick تعریف کنم و کدهام و توش بذارم.
اول باید Procedure مربوطه رو بنویسید و بعد ، اون رو به رویداد مورد نظر مربوط کنید ...
یعنی اول یک Procedure مینویسید ( در Unit مربوطه ) ، بعد مثلا به صورت زیر به رویداد OnClick یک Button مرتبط میکنید : ( مثلا اگه Procedur ای به نام MyProcedure نوشته باشید )
Button.OnClick := MyProcedure

موفق باشید ...

یاسر مددیان
شنبه 02 تیر 1386, 11:47 صبح
این کد رو اگه دوستان ببینن ممنون میشم. فرم ساخته میشه ولی می خوام به کنترلها مقدار دهی کنم ارور میده.
اگه یکی از دوستان کاملش کنه مثلا واسه یه Button رویداد Onclick تعریف کنه و بذاره ممنون میشم.


حالا یه سوال دیگه. تو سوکت هر دفعه که یه نفر پیام خصوصی میفرسته چجوری چک کنم که واسه یه ID که قبلاً پیام داده دیگه فرم جدید باز نشود؟


ممنون میشم اگه کمک کنید.

testym2007
شنبه 02 تیر 1386, 12:03 عصر
ابتدا یه آرایه تعریف کن به شکل زیر
achat : array[0..10] of TFrmChat
بعد توی دستور دکمه اینارو بزن
achat[i].Show;
achat[i].Memo1.Lines.Add( 'salam' )

یاسر مددیان
شنبه 02 تیر 1386, 12:06 عصر
درسته ، ولی مشخص نیست که چند نفر تو یه زمان PM می فرستن. آرایه رو چند تایی تعریف کنم ؟ 10 ، 100 ، 1000 ؟

اگه سورس منم یه نگاهی بندازید واسه ایجاد رویداد ممنون میشم.

یاسر مددیان
شنبه 02 تیر 1386, 12:30 عصر
کسی نیست ساختار درستش رو بدونه و کمک کنه ؟

SYNDROME
شنبه 02 تیر 1386, 13:38 عصر
با سلام

درسته ، ولی مشخص نیست که چند نفر تو یه زمان PM می فرستن. آرایه رو چند تایی تعریف کنم ؟ 10 ، 100 ، 1000 ؟

می تونی از آرایه متغییر استفاده کنی.
http://barnamenevis.org/forum/showthread.php?t=40356&highlight=%C2%D1%C7%26%231740%3B%E5

Mahmood_M
شنبه 02 تیر 1386, 16:48 عصر
برای مقداردهی به عناصری که هنوز ساخته نشدن ، نباید به صورت مثلا Label1.Text := 'm' استفاده کنید ، چون این عناصر وجود ندارن و فقط متغیری با نوع آنها موجود است ...
برای مقدار دهی این عناصر باید به صورت زیر بنویسید :

TRichEdit(RichEdit1).Lines.Text := 'ÓáÇã';
TLabel(Label1).Caption := 'Delphi';
البته با این شرط که Parent اونها رو تنظیم کردید ...

برای نوشتن رویداد یک دکمه که در زمان اجرا ساخته می شه ، همونطور که در پست قبلی اشاره شد ، باید Procedure رو از قبل نوشته باشید و بعد اون رو مرتبط کنید.
مثال :

type
TForm1 = class(TForm)
private
{ Private declarations }
public
Procedure MyProc(Sender: TObject);
{ Public declarations }
end;
...
procedure TForm1.MyProc(Sender: TObject);
begin
TForm(f_pm).Caption := 'Hello !!!';
end;
...
BitBtn1.OnClick := MyProc;

نکته مهم : پارامترهای Procedure ای که تعریف میشه باید مثل اصلیش باشه ( منظورم اینه : Sender: TObject )

فایل اصلاه شده پروژه رو ضمیمه کردم ...


حالا یه سوال دیگه. تو سوکت هر دفعه که یه نفر پیام خصوصی میفرسته چجوری چک کنم که واسه یه ID که قبلاً پیام داده دیگه فرم جدید باز نشود؟

باید مشخصات رو در یک ThreadList داشته باشید و هر بار که میخواید فرمی رو باز کنید با یک شناسه ، مشخصات رو از ThreadList بخونید و بعد مقایسه کنید ...

موفق باشید ...

9369

یاسر مددیان
شنبه 02 تیر 1386, 16:53 عصر
محمود جان دست گلت درد نکنه. از بقیه دوستان هم متشکرم به خاطر کمکشون.

dkhatibi
شنبه 02 تیر 1386, 17:26 عصر
اگه می تونی در صورت تکمیل اون رو اینجا بگذار.

testym2007
شنبه 02 تیر 1386, 17:33 عصر
این یه یاهو مسنجر هستش که میتونه به تمام سئولات جواب بده :چشمک:

یاسر مددیان
شنبه 02 تیر 1386, 21:06 عصر
حتماً. تکمیل که کردم میذارم اینجا. از همه دوستان هم واسه کمکشون ممنونم.

یاسر مددیان
شنبه 02 تیر 1386, 21:30 عصر
این یه یاهو مسنجر هستش که میتونه به تمام سئولات جواب بده :چشمک:

خیلی به درد خورد.
ممنون.

Veyskarami
پنج شنبه 07 تیر 1386, 08:34 صبح
دستتون درد نکنه
می خواستم بدونم چرا موقع پی ام دادن ارور میده و اینکه چطور میشه با این کامپوننت وارد روم های یاهو شد؟
ممنون