تطبيق دلفي علبة النظام

click fraud protection

ألق نظرة على شريط المهام الخاص بك. انظر المنطقة حيث يقع الوقت؟ هل هناك اي رموز اخرى هناك؟ يسمى المكان علبة نظام Windows. هل ترغب في وضع دلفي رمز التطبيق هناك؟ هل تريد أن يكون هذا الرمز متحركًا - أو يعكس حالة تطبيقك؟

قد يكون هذا مفيدًا للبرامج التي يتم تركها تعمل لفترات طويلة دون أي تفاعل من المستخدم (مهام الخلفية التي عادة ما تعمل على جهاز الكمبيوتر الخاص بك طوال اليوم).

ما يمكنك فعله هو جعل تطبيقات دلفي الخاصة بك تبدو كما لو أنها يتم تصغيرها إلى الدرج (بدلاً من شريط المهام ، مباشرة إلى زر Win Start) عن طريق وضع رمز في الدرج وعمل النموذج (النماذج) الخاص بك في نفس الوقت غير مرئى.

فلنقم بتجربة ذلك

لحسن الحظ ، يعد إنشاء تطبيق يتم تشغيله في علبة النظام أمرًا سهلاً للغاية - هناك حاجة إلى وظيفة واحدة فقط (API) ، Shell_NotifyIcon ، لإنجاز المهمة.

يتم تعريف الوظيفة في وحدة ShellAPI ويتطلب معلمتين. الأول هو علامة تشير إلى ما إذا كان الرمز يتم إضافته أو تعديله أو إزالته ، والثاني هو مؤشر إلى بنية TNotifyIconData تحتوي على معلومات حول الرمز. يتضمن ذلك مقبض الأيقونة المراد إظهارها ، والنص المراد إظهاره كنصيحة أداة عندما يكون الماوس فوق الرمز ، الرمز مقبض النافذة التي ستتلقى رسائل الرمز ونوع الرسالة التي سيرسلها الرمز إلى ذلك نافذة او شباك.

instagram viewer

أولاً ، في القسم الخاص للنموذج الرئيسي ، ضع السطر:
TrayIconData: TNotifyIconData ؛

اكتب
TMainForm = صف دراسي(TForm)
إجراء FormCreate (المرسل: TObject) ؛
نشر
TrayIconData: TNotifyIconData ؛
{الإعلانات الخاصة}عامة{الإعلانات العامة}النهاية;

ثم ، في النموذج الرئيسي الخاص بك OnCreate الطريقة ، قم بتهيئة بنية بيانات TrayIconData واستدعاء وظيفة Shell_NotifyIcon:

مع TrayIconData دوبيجين
cbSize: = SizeOf (TrayIconData) ؛
Wnd: = مقبض
معرف: = 0 ؛
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP ؛
uCallbackMessage: = WM_ICONTRAY ؛
hIcon: = التطبيق. أيقونة. مقبض؛
StrPCopy (szTip ، التطبيق. عنوان)؛
النهاية;
Shell_NotifyIcon (NIM_ADD،TrayIconData) ؛

تشير المعلمة Wnd للهيكل TrayIconData إلى النافذة التي تتلقى رسائل الإعلام المرتبطة بأيقونة.

يشير hIcon إلى الرمز الذي نريد إضافته إلى الدرج - في هذه الحالة ، يتم استخدام الرمز الرئيسي للتطبيقات.
يحتفظ szTip بنص Tooltip لعرضه للرمز - في حالتنا عنوان التطبيق. يمكن أن يستوعب szTip ما يصل إلى 64 حرفًا.
تم تعيين معلمة uFlags لإخبار الرمز بمعالجة رسائل التطبيق ، واستخدام رمز التطبيق ونصائحه. ال uCallbackMessage يشير إلى معرف الرسالة المعرف بواسطة التطبيق. يستخدم النظام المعرف المحدد لرسائل الإعلام التي يرسلها إلى النافذة المحددة بواسطة Wnd كلما حدث حدث الماوس في المستطيل المحيط بالأيقونة. تم تعيين هذه المعلمة على ثابت WM_ICONTRAY المحدد في قسم الواجهة لوحدة النماذج ويساوي: WM_USER + 1؛

يمكنك إضافة الرمز إلى Tray عن طريق استدعاء دالة Shell_NotifyIcon API. تضيف المعلمة الأولى "NIM_ADD" رمزًا إلى منطقة الدرج. يتم استخدام القيمتين المحتملتين الأخريين ، NIM_DELETE و NIM_MODIFY لحذف أو تعديل رمز في الدرج - سنرى كيف لاحقًا في هذه المقالة. المعلمة الثانية التي نرسلها إلى Shell_NotifyIcon هي بنية TrayIconData الأولية.

خذ واحدة

إذا قمت بتشغيل مشروعك الآن ، سترى رمزًا بالقرب من الساعة في الدرج. لاحظ ثلاثة أشياء.

1) أولاً ، لا يحدث شيء عند النقر (أو القيام بأي شيء آخر باستخدام الماوس) على الرمز الموجود في الدرج - لم نقم بإنشاء إجراء (معالج الرسائل) حتى الآن.
2) ثانيًا ، يوجد زر على شريط المهام (من الواضح أننا لا نريده هناك).
3) ثالثًا ، عند إغلاق التطبيق ، يبقى الرمز في الدرج.

خذ اثنين

دعونا نحل هذا إلى الوراء. لإزالة الرمز من الدرج عند الخروج من التطبيق ، عليك استدعاء Shell_NotifyIcon مرة أخرى ، ولكن مع NIM_DELETE كمعلمة أولى. يمكنك القيام بذلك في OnDestroy معالج الحدث للنموذج الرئيسي.

إجراء TMainForm. FormDestroy (المرسل: TObject) ؛
ابدأ
Shell_NotifyIcon (NIM_DELETE،TrayIconData) ؛
النهاية;

لإخفاء التطبيق (زر التطبيق) من شريط المهام ، سنستخدم خدعة بسيطة. في التعليمات البرمجية المصدر للمشاريع ، أضف السطر التالي: Application. ShowMainForm: = خطأ ؛ قبل التطبيق. CreateForm (TMainForm ، MainForm) ؛ على سبيل المثال ، دعها تبدو كما يلي:

...
ابدأ
تطبيق. التهيئة
تطبيق. ShowMainForm: = خطأ ؛
تطبيق. CreateForm (TMainForm ، MainForm) ؛
تطبيق. يركض؛
النهاية.

وأخيرًا ، حتى تستجيب أيقونة Tray لأحداث الماوس ، نحتاج إلى إنشاء إجراء لمعالجة الرسائل. أولاً ، نعلن إجراء معالجة الرسالة في الجزء العام من تعريف النموذج: الإجراء TrayMessage (var Msg: TMessage)؛ الرسالة WM_ICONTRAY ؛ ثانيًا ، يبدو تعريف هذا الإجراء كما يلي:

إجراء TMainForm. TrayMessage (فار Msg: TMessage) ؛
بداية Msg.lParam من
زر WM_LBUTTONDOWN:
ابدأ
ShowMessage (النقر فوق الزر الأيسر
- دعنا نظهر النموذج! ') ؛
النموذج الرئيسي. تبين؛
النهاية;
WM_RBUTTONDOWN:
ابدأ
ShowMessage (تم النقر على الزر الأيمن
- دعنا نخفي النموذج! ') ؛
النموذج الرئيسي. إخفاء؛
النهاية;
النهاية;
النهاية;

تم تصميم هذا الإجراء للتعامل فقط مع رسالتنا ، WM_ICONTRAY. يأخذ قيمة LParam من بنية الرسالة التي يمكن أن تعطينا حالة الماوس عند تنشيط الإجراء. من أجل البساطة ، سنتعامل فقط مع الماوس الأيسر لأسفل (WM_LBUTTONDOWN) والفأرة اليمنى لأسفل (WM_RBUTTONDOWN). عندما يكون زر الماوس الأيسر على الرمز نعرض النموذج الرئيسي ، عند الضغط على الزر الأيمن ، نقوم بإخفائه. بالطبع ، هناك رسائل أخرى لإدخال الماوس يمكنك التعامل معها في الإجراء ، مثل زر لأعلى ، زر مزدوج نقرة إلخ.

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

instagram story viewer