ورود

View Full Version : سوال: دستور Application.HandleMessage



soft-c
شنبه 11 خرداد 1392, 13:50 عصر
سلام
این دستور را اگر در قسمت source برنامه بنویسیم چه منطقی داره؟

application.HandleMessage;
sleep(200);
application.HandleMessage;

یوسف زالی
شنبه 11 خرداد 1392, 22:01 عصر
سلام.
منطق بزن در رو!
فکر می کنم این کار به خاطر این باشه که طرف می خواسته از رسیدن یک پیغام یا ست شدن یک متغیر مطمئن بشه که اگه این طور باشه گند زده.
اون HandleMessage رو هم نوشته که بگه من از ProcessMessage استفاده نکردم پس حرفه ای هستم!!
البته همه ی این سناریو رو همین الان تو ذهنم نوشتم :لبخند:
کد برای کجاست؟

soft-c
شنبه 11 خرداد 1392, 23:10 عصر
کد برای کجاست؟
منظورتون چیه برای کجاست؟

یوسف زالی
شنبه 11 خرداد 1392, 23:34 عصر
از چه سورسی برداشته شده؟ قبل و بعدش چیه؟ ...

Felony
یک شنبه 12 خرداد 1392, 05:40 صبح
متد HandleMessage از کلاس TApplication روند فعلی اجرای برنامه رو متوقف میکنه تا زمانی که ویندوز یک پیغام از صف پیغام های برنامه رو پردازش کنه ، و بعد از اون روند اجرای برنامه ادامه پیدا میکنه ؛ اگر صف پیغام ها خالی بود ، رویداد OnIdle شئ Application صدا زده میشه که با مقدار دهی این رویداد میشه از بیکار بودن برنامه مطلع شد و کارهای مختلفی مثل به روز رسانی برنامه و ... رو در زمان بیکار بودن برنامه انجام داد .

اگر تو برنامه منتظر پیغام خاصی هستید تا با رسیدن اون پیغام خاص عملیاتی رو انجام بدید ، از همچین کدی استفاده نکنید :


repeat
Application.HandleMessage;
until HandledMessage= WM_User+110;

چون این حلقه با توجه به روند کاری متد HandleMessage برنامه رو تا زمان دریافت پیغام مورد نظر به کما میبره ، در این مواقع طبق گفته خود Embarcadero بهتره از متد ProcessMessage استفاده بشه تا پیغام های موجود تو صف همه یکجا پردازش بشه و تکلیف معلوم بشه که پیغام مورد نظر در صف موجود هست یا خیر .


اون HandleMessage رو هم نوشته که بگه من از ProcessMessage استفاده نکردم پس حرفه ای هستم!!
در آخر ، جوری نشه که بگین هر کی از این متد ProcessMessages استفاده کرد ناشی هست ! نه ، من بارها گفتم ، از این متد بی مهابا استفاده نکنید ، یعنی اگر میخواین استفاده کنید ، بررسی هایی در مورد کاراییش در مورد خاصی که میخواین پیاده کنید انجام بدید .

soft-c
یک شنبه 12 خرداد 1392, 07:49 صبح
متد HandleMessage از کلاس TApplication روند فعلی اجرای برنامه رو متوقف میکنه تا زمانی که ویندوز یک پیغام از صف پیغام های برنامه رو پردازش کنه ، و بعد از اون روند اجرای برنامه ادامه پیدا میکنه ؛ اگر صف پیغام ها خالی بود ، رویداد OnIdle شئ Application صدا زده میشه که با مقدار دهی این رویداد میشه از بیکار بودن برنامه مطلع شد و کارهای مختلفی مثل به روز رسانی برنامه و ... رو در زمان بیکار بودن برنامه انجام داد .

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