الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف توقف قائمه النظام في النموذج System Menu in form

مغلق
بدأه pc.2058 في 6 أبريل 2007 · 0 رد · 401 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1

كنت اشتغل على برنامج يحتوي على عدة نماذج ،وفي Thread يقوم بعرض حاله عمل الthread في احد النماذج عن طريق الدالة التزامن synchronize. الى هنا كل شي يعمل كما هو مصصم له. لا توجد اي مشكلة.

ولكن عندما تقوم بالضغط على مفتاح الفارة اليمين على اسم النموذج لعرض قائمه النظام. يحدث تاثير انعكاسي على ال Thread ويبدى يتأخر او يتوقف احياناً.

وهذا بسبب ان دالة Synchronize تعتمد في عملها على مبداْ (الرسائل) messages وبما ان النموذج في حالة عرض قائمة النظام اذا لوب الرسائل متوقف.؟؟؟

حقا انها مشكلة لم أنتبه لها؟

اذا ما الحل؟. :blink:

ربما يقول احدهم بسيطة؟ اوقف عرض قائمة النظام biSystemMenu من BorderIcons . صحيح ولكن المشكلة اني استعمل bsToolWindow مع زرار اغلاق ؟ اي اني اريد النموذج هكذا

bsToolWindow

Close Button

بدون biSystemMenu

التجميع هذا لا يعمل مع بعضه؟ اي لن تحصل عليه ابدا؟ :huh:

الحل الوحيد اللذي استطعت الوصول له ان استعمل WinProc

واوقف عمل الرسالة وهي WM_NCRBUTTONDOWN التى ترسلها الوندوز عند الضغط على منطقة اسم النموذج بزرار الفارة اليمين

ثم اقوم بتجاهل هذه الرسالة. حل جميل اليس كذالك؟ :D

بس هناك مشكلة بسيطة... ..وهي ان جميع الرسائل ترسل الى هذا الروتين ومن ثم تذهب الى الروتين الاصلي اذا كانت الرسالة غير موجوده في هذا الروتين.( الاف المسجات سوف تصل الى هذا الروتين مثل حركه الفارة او اي شي مثل الضغط على زرار على النموذج وهكذا....) أذا هذا الحل يعمل بس انا ايضا بتصاميمى انظر اى الاداء. B)

بس هناك حل اخر! :) نعم دلفي له مقدرة انه يرسلك رسال معينة.انت تختارها مثل WM_NCRBUTTONDOWN

 
procedure TLogFrm.WMNCRBUTTONDOWN(var message:Tmessage);
begin
  with message do
  case Msg of
	  WM_NCRBUTTONDOWN:{Do Nothing}
  end;
end;

او هكذا

procedure TLogFrm.WMNCRBUTTONDOWN(var message:Tmessage);
begin
		{Do Nothing}
end;

يجب ان تترك الملاحظة والا سوف يلغي الكومبايلر الروتين بكامله .

وهذا اعلانها في Public

procedure WMNCRBUTTONDOWN(var message:Tmessage); message 
WM_NCRBUTTONDOWN;

وهكذا نرى أن الحل كان جدا بسيط....

ارجوا ان يكون الشرح مفيد

وشكرا

تم تعديل هذه المشاركة بواسطة pc.2058 في 6 أبريل 2007 في 15:03

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…