11-01-2009, 12:09 PM
نواصل...
خطوات إضافية: البرنامج مكتمل ويمكن إضافة خيارات أخرى، مثل جعل البرنامج يظهر في أحد المنطقتين دون الأخرى، عرض خيار للمستخدم فيما إذا كان يرغب بتصغير البرنامج عند غلقه...
الخطوة الأولى: يمكن أن نجعل البرنامج يظهر في أحد المكانين، إما في علبة شريط المهام أو في شريط المهام نفسه، ولأجل ذلك نقوم بما يلي:
أولا: من الأحسن أن نجعل إجراء منفرد يعرض الأيقونة، ثم نضيفه إلى FormCreate أو نترك هذا الأخير فارغا:
نستعمل Ctrl+Alt+C ونكتب:
* يمكن إضافة زر يعرض الأيقونة إلى جنب ساعة الويندوز، ويخفيها من شريط المهام، ونجعله غير مفعل إذا كانت الأيقونة تظهر، ويفعل هو الآخر زر عرض التلميح، فنضع زر ونكتب في حدث النقر عليه:
ويلزم لأجل هذا التغيير، تغيير زر عرض النموذج الذي وضعناه في القائمة المنسدلة، بالشكل التالي:
الخطوة الثانية: إضافة مكون من النوع TCheckBox ثم نعدل في الإجراء الذي يتلقى الأحداث بإضافة حدث غلق النموذج ونغير فيه بما يلي:
آخر إضافة: يمكن إضافة تلميح منطادي عند محاولة غلق النموذج (في حين خيار "تصغير عند الغلق" مفعل) ينبه المستعمل على أن البرنامج لم يغلق، ولا يزال يشتغل (يضاف هذا الأمر في الإجراء الذي يتقلى أحداث التلميح):ملاحظات:
- inherited ترث الأحداث الأصلية، وفي حالتنا هذه غيرنا في حدث التصغير وفي حدث الغلق وبقي حدث تكبير النموذج وحدث تغيير حجم النموذج.
- أحيانا يفقد البرنامج التركيز (Focus) ولا يتلقى حينها أوامر لوحة المفاتيح (يحدث ذلك أحيانا عند تكبير النموذج) لاسترجاع التركير على البرنامج نستعمل الأمر BringToFront وأحيانا لا تنفعل فنستخدم:
SetForegroundWindow(Handle);
أتمنى أن يكون الموضوع نال إعجابكم وأشبع حاجتكم
وكما ذكرنا سابقا أنه توجد مكونات كثيرة تقوم بهذا العمل (كما أشار إلى ذلك بعض الأعضاء)، وأن الإصدارات الحديثة للدلفي تأتي معها مثل هذه المكونات، لكننا كما بينا أننا نريد أن نقوم بذلك بأنفسنا برمجيا لعدة أسباب منها: أن نتعلم كيفية التعامل دوال Api، والتحكم فيها وعرضها بالشكل الذي نريد، جعل البرنامج أكثر خفة بإضافة العناصر التي نحتاجها فقط (وهذا مهم بالنسبة لأي مبرمج محترف لأنه يعتبر 10 Kb إضافية لوزن البرنامج شيء ثقيل)...
المثال النهائي مع الكود سورس في المرفقات.
هذا والله سبحانه وتعالى أعلم، وصلى الله على سيدنا محمد.
والسلام عليكم ورحمة الله.
خطوات إضافية: البرنامج مكتمل ويمكن إضافة خيارات أخرى، مثل جعل البرنامج يظهر في أحد المنطقتين دون الأخرى، عرض خيار للمستخدم فيما إذا كان يرغب بتصغير البرنامج عند غلقه...
الخطوة الأولى: يمكن أن نجعل البرنامج يظهر في أحد المكانين، إما في علبة شريط المهام أو في شريط المهام نفسه، ولأجل ذلك نقوم بما يلي:
أولا: من الأحسن أن نجعل إجراء منفرد يعرض الأيقونة، ثم نضيفه إلى FormCreate أو نترك هذا الأخير فارغا:
PHP كود :
private
procedure ShowMyTNA;
PHP كود :
procedure TForm1.ShowMyTNA;
begin
with MyTNA do
begin
cbSize := SizeOf(TNotifyIconData);
MyTNA.uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
Wnd := Handle;//
uCallbackMessage := WM_APP +1;
hIcon := Application.Icon.Handle;
szTip := 'Delphi 4 arab';
end;
Shell_NotifyIcon(NIM_ADD, @MyTNA);
end;
PHP كود :
procedure TForm1.BtnShowTNAClick(Sender: TObject);
begin
ShowMyTNA;//عرض الأيقونة
BtnShowTNA.Enabled := False;//تعطيل زر عرض الأيقونة
BtnShowHint.Enabled := True;//تفعيل زر عرض الأيقونة
ShowWindow(Application.Handle, SW_HIDE) //إخفاء البرنامج من شريط المهام
end;
ويلزم لأجل هذا التغيير، تغيير زر عرض النموذج الذي وضعناه في القائمة المنسدلة، بالشكل التالي:
PHP كود :
procedure TForm1.N1Click(Sender: TObject);
begin
Show;//عرض النموذج
FormDestroy(Sender);//إخفاء الأيقونة، وذلك باستدعاء الأوامر التي تحدث عند إعدام النموذج
BtnShowTNA.Enabled := True;//تفعيل زر عرض الأيقونة
BtnShowHint.Enabled := False;//تعطيل زر عرض التلميح مرة أخرى
ShowWindow(Application.Handle, SW_SHOW)//عرض اسم البرنامج في شريط المهام
end;
PHP كود :
procedure TForm1.WMSyscommand(var msg: TWmSysCommand);
begin
if msg.CmdType and $FFF0 = SC_MINIMIZE then
begin
Hide;
BtnShowTNA.Click;
end else
begin
if msg.CmdType and $FFF0 = SC_CLOSE then// إذا تلقى حدث غلق النموذج
if ChkBxCloseOnExit.Checked then//التحقق من أن الخيار "إخفاء عند الغلق" مفعل
begin
ShowMyTNA;//عرض الأيقونة
Hide;//إخفاء النموذج
end else Close//وإن لم يكن مفعل ...فيقوم الإجراء بغلق النموذج
else inherited;//وإن لم يتلقى الإجراء حدث تصغير ولا حدث الغلق...فسيرث الأحداث الأخرى
end
end;
PHP كود :
...
if msg.CmdType and $FFF0 = SC_CLOSE then
if ChkBxCloseOnExit.Checked then
begin
ShowMyTNA;
ShowBalloonTips('لا يزال البرنامج مفتوحا', 'تنبيه');
Hide;
...
- inherited ترث الأحداث الأصلية، وفي حالتنا هذه غيرنا في حدث التصغير وفي حدث الغلق وبقي حدث تكبير النموذج وحدث تغيير حجم النموذج.
- أحيانا يفقد البرنامج التركيز (Focus) ولا يتلقى حينها أوامر لوحة المفاتيح (يحدث ذلك أحيانا عند تكبير النموذج) لاسترجاع التركير على البرنامج نستعمل الأمر BringToFront وأحيانا لا تنفعل فنستخدم:
SetForegroundWindow(Handle);
أتمنى أن يكون الموضوع نال إعجابكم وأشبع حاجتكم
وكما ذكرنا سابقا أنه توجد مكونات كثيرة تقوم بهذا العمل (كما أشار إلى ذلك بعض الأعضاء)، وأن الإصدارات الحديثة للدلفي تأتي معها مثل هذه المكونات، لكننا كما بينا أننا نريد أن نقوم بذلك بأنفسنا برمجيا لعدة أسباب منها: أن نتعلم كيفية التعامل دوال Api، والتحكم فيها وعرضها بالشكل الذي نريد، جعل البرنامج أكثر خفة بإضافة العناصر التي نحتاجها فقط (وهذا مهم بالنسبة لأي مبرمج محترف لأنه يعتبر 10 Kb إضافية لوزن البرنامج شيء ثقيل)...
المثال النهائي مع الكود سورس في المرفقات.
هذا والله سبحانه وتعالى أعلم، وصلى الله على سيدنا محمد.
والسلام عليكم ورحمة الله.

