kachwahed
14-02-2009, 01:28 PM
بسم الله الرحمن الرحيم
الحمد لله والصلاة والسلام على رسول الله صلى الله عليه وسلم، أما بعد...
السلام عليكم
في هذا الموضوع...
شرح مختصر حول رسائل الويندوز (Windows Message) مع شروحات مصورة (فلاش SWF) حول طريقة استعمال وإدماج رسائل الويندوز كأحداث تضاف الى المكونات الأصلية للدلفي.
نبدأ برسائل الويندوز وطريقة استعمالها في النموذج TForm...
ثم نعرض طريقة إدماجها في أي مكون باستعمال تقنية إدماج الأقسام (interjected class).
بداية وباختصار...
رسائل الويندوز (Windows Message)
ما هي رسائل الويندوز؟
رسائل الويندوز هي إخبار (أو إشعار) من مرسل (الويندوز أو برنامج خارجي) إلى مستقبل (برنامجك) عن وقوع حدث معين من طرف نظام الويندوز.
مثلا: تحريك الماوس على سطح النموذج (Form) يتم بإرسال حدث تحريك الماوس، وبنفس الطريقة حدث النقر على أحد أزراره،...الخ.
يضع الويندوز بين أيدينا مجموعة "رسائل الويندوز" التي يمكن استخدامها بعدة أشكال، من تحقيق أغراض مختلفة.
تبدو الرسائل في شكلها العام كما يلي:
Type
Tmsg = packed record
hwnd: HWND; // مقبض (Handle) العنصر المرسل
message: Uint; // معرف رسالة الويندوز
wParam: WPARAM; // المتغير wParam للرسالة
lParam: LPARAM; // المتغير lParam للرسالة
time: DWORD; // وقت إرسال الرسالة
pt: Tpoint; // إحداثيات موضع مؤشر الماوس عند وقوع حدث الرسالة
end;
ملاحظة هامة:
هذا شكل عام لرسالة الويندوز، وتعريف الرسالة يختلف من رسالة إلى أخرى حسب نوعية المتغيرات التي يضمها.
مثال صغير:
WM_CHAR هو رسالة ويندوز تقع عند الضغط أحد أزرار لوح المفاتيح.
تستعمل هذه الرسالة في الحدث OnKeyPress الشهير المتوفر في معظم المكونات المرئية للدلفي.
من بين متغيرات هذا الحدث النوع TWmChar الذي يعرف كما يلي:
Type
TWmChar = packed record
msg: Cardinal; // رقم (كود) الحدث وهو ثابت 258
CharCode: Word; // كود الزر المضغوط بتعريف ASCII مثل ا :VK_CANCEL
Result: Integer; // قيمة رقمية يرجعها البرنامج الذي تلقى الحدث
KeyData: Integer; // قيمة عددية متعلقة بالزر المضغوط
end;
كيف يتم استعمالها؟
يتم استدعاء أحداث الويندوز ليتلقاها البرنامج في شكل إجراء (Procedure)، وتكتب الأوامر المراد حدوثها في هذا الإجراء، وفق الشكل التالي:
procedure {إسم الإجراء}(var {اسم المتغير}: {نوع متغير الحدث}); message {اسم الحدث};
مثال عن الحدث WM_CHAR:
procedure KeyPerssEvent(var VarKeyPress: TWMCHAR); message WM_CHAR;
مثال عن كتابة الأوامر في الإجراء:
procedure TForm1.KeyPerssEvent(var VarKeyPress: TWMCHAR);
begin
ShowMessage('Key Pressed!');
end;
ملاحظات:
1- يمكن استدعاء حدث في مكون معين باستخدام الدالة Perform، مثلا:
Memo1.Perform(...)
2- كما يمكن إرسائل حدث معين باستخدام الدالة SendMessage
SendMessage(...)
وهذا الرابط لشرح مصور في ملف فلاش (SWF) حول طريقة إضافة واستعمال أحداث جديدة.
http://rapidshare.com/files/197882522/WinMsgDemo.rar
****ا أن ينال إعجابكم، هذا أول شرح فلاش أقوم به:D
ستأتي البقية فيما بعد إن شاء الله.
الحمد لله والصلاة والسلام على رسول الله صلى الله عليه وسلم، أما بعد...
السلام عليكم
في هذا الموضوع...
شرح مختصر حول رسائل الويندوز (Windows Message) مع شروحات مصورة (فلاش SWF) حول طريقة استعمال وإدماج رسائل الويندوز كأحداث تضاف الى المكونات الأصلية للدلفي.
نبدأ برسائل الويندوز وطريقة استعمالها في النموذج TForm...
ثم نعرض طريقة إدماجها في أي مكون باستعمال تقنية إدماج الأقسام (interjected class).
بداية وباختصار...
رسائل الويندوز (Windows Message)
ما هي رسائل الويندوز؟
رسائل الويندوز هي إخبار (أو إشعار) من مرسل (الويندوز أو برنامج خارجي) إلى مستقبل (برنامجك) عن وقوع حدث معين من طرف نظام الويندوز.
مثلا: تحريك الماوس على سطح النموذج (Form) يتم بإرسال حدث تحريك الماوس، وبنفس الطريقة حدث النقر على أحد أزراره،...الخ.
يضع الويندوز بين أيدينا مجموعة "رسائل الويندوز" التي يمكن استخدامها بعدة أشكال، من تحقيق أغراض مختلفة.
تبدو الرسائل في شكلها العام كما يلي:
Type
Tmsg = packed record
hwnd: HWND; // مقبض (Handle) العنصر المرسل
message: Uint; // معرف رسالة الويندوز
wParam: WPARAM; // المتغير wParam للرسالة
lParam: LPARAM; // المتغير lParam للرسالة
time: DWORD; // وقت إرسال الرسالة
pt: Tpoint; // إحداثيات موضع مؤشر الماوس عند وقوع حدث الرسالة
end;
ملاحظة هامة:
هذا شكل عام لرسالة الويندوز، وتعريف الرسالة يختلف من رسالة إلى أخرى حسب نوعية المتغيرات التي يضمها.
مثال صغير:
WM_CHAR هو رسالة ويندوز تقع عند الضغط أحد أزرار لوح المفاتيح.
تستعمل هذه الرسالة في الحدث OnKeyPress الشهير المتوفر في معظم المكونات المرئية للدلفي.
من بين متغيرات هذا الحدث النوع TWmChar الذي يعرف كما يلي:
Type
TWmChar = packed record
msg: Cardinal; // رقم (كود) الحدث وهو ثابت 258
CharCode: Word; // كود الزر المضغوط بتعريف ASCII مثل ا :VK_CANCEL
Result: Integer; // قيمة رقمية يرجعها البرنامج الذي تلقى الحدث
KeyData: Integer; // قيمة عددية متعلقة بالزر المضغوط
end;
كيف يتم استعمالها؟
يتم استدعاء أحداث الويندوز ليتلقاها البرنامج في شكل إجراء (Procedure)، وتكتب الأوامر المراد حدوثها في هذا الإجراء، وفق الشكل التالي:
procedure {إسم الإجراء}(var {اسم المتغير}: {نوع متغير الحدث}); message {اسم الحدث};
مثال عن الحدث WM_CHAR:
procedure KeyPerssEvent(var VarKeyPress: TWMCHAR); message WM_CHAR;
مثال عن كتابة الأوامر في الإجراء:
procedure TForm1.KeyPerssEvent(var VarKeyPress: TWMCHAR);
begin
ShowMessage('Key Pressed!');
end;
ملاحظات:
1- يمكن استدعاء حدث في مكون معين باستخدام الدالة Perform، مثلا:
Memo1.Perform(...)
2- كما يمكن إرسائل حدث معين باستخدام الدالة SendMessage
SendMessage(...)
وهذا الرابط لشرح مصور في ملف فلاش (SWF) حول طريقة إضافة واستعمال أحداث جديدة.
http://rapidshare.com/files/197882522/WinMsgDemo.rar
****ا أن ينال إعجابكم، هذا أول شرح فلاش أقوم به:D
ستأتي البقية فيما بعد إن شاء الله.