सिस्टम ट्रे डेल्फी एप्लीकेशन

अपने टास्क बार पर नज़र डालें। वह क्षेत्र देखें जहां समय स्थित है? क्या कोई अन्य आइकन हैं? जगह को विंडोज सिस्टम ट्रे कहा जाता है। क्या आप अपना स्थान देना चाहेंगे? डेल्फी आवेदन के आइकन वहाँ? क्या आप उस आइकन को एनिमेटेड करना चाहेंगे - या आपके एप्लिकेशन की स्थिति को प्रतिबिंबित करेंगे?

यह उन प्रोग्रामों के लिए उपयोगी होगा जो बिना किसी उपयोगकर्ता सहभागिता के लंबे समय तक चलते रहते हैं (पृष्ठभूमि कार्य जिन्हें आप आमतौर पर अपने पीसी पर लंबे समय तक चलाते रहते हैं)।

आप अपने डेल्फी अनुप्रयोगों को देखने के लिए क्या कर सकते हैं जैसे कि वे ट्रे (के बजाय) को कम कर रहे हैं टास्क बार, विन स्टार्ट बटन के दाईं ओर) ट्रे में एक आइकन रखकर और साथ ही साथ आपका फॉर्म बना रहे हैं अदृश्य।

चलो इसे ट्रे

सौभाग्य से, सिस्टम ट्रे में चलने वाले एप्लिकेशन को बनाना बहुत आसान है - कार्य को पूरा करने के लिए केवल एक (एपीआई) फ़ंक्शन, Shell_NotifyIcon की आवश्यकता है।

फ़ंक्शन में परिभाषित किया गया है शेलएपीआई इकाई और दो मापदंडों की आवश्यकता है। पहला एक ध्वज है जो दर्शाता है कि आइकन जोड़ा जा रहा है, संशोधित किया गया है या हटा दिया गया है, और दूसरा आइकन के बारे में जानकारी रखने वाले TNotifyIconData संरचना का एक संकेतक है। जिसमें आइकन को दिखाने के लिए हैंडल शामिल है, माउस के ऊपर माउस होने पर टूल टिप के रूप में दिखाने के लिए टेक्स्ट, विंडो का हैंडल जो आइकन के संदेश प्राप्त करेगा और संदेश का प्रकार इस पर संदेश भेजेगा खिड़की।

instagram viewer

सबसे पहले, अपने मुख्य फॉर्म के प्राइवेट सेक्शन में लाइन लगाएं:
ट्राईकॉनडाटा: TNotifyIconData;

प्रकार
TMainForm = कक्षा(TForm)
प्रक्रिया फॉर्मक्रिएट (प्रेषक: TObject);
निजी
ट्राईकॉनडाटा: TNotifyIconData;
{निजी घोषणाएँ}जनता{सार्वजनिक घोषणाएँ}समाप्त;

फिर, अपने मुख्य रूप में OnCreate विधि, TrayIconData डेटा संरचना को आरंभ करें और Shell_NotifyIcon फ़ंक्शन को कॉल करें:

साथ में TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
वंड: = संभाल;
यूआईडी: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = आवेदन। चिह्न। संभाल;
StrPCopy (szTip, Application)। शीर्षक);
समाप्त;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

TrayIconData संरचना का Wnd पैरामीटर उस विंडो को इंगित करता है जो किसी आइकन से संबंधित अधिसूचना संदेश प्राप्त करता है।

HIcon उस आइकन को इंगित करता है जिसे हम ट्रे में जोड़ना चाहते हैं - इस मामले में, एप्लिकेशन मुख्य आइकन का उपयोग किया जाता है।
SzTip टूलटिप टेक्स्ट को आइकन के लिए प्रदर्शित करता है - हमारे मामले में एप्लिकेशन का शीर्षक। SzTip 64 अक्षरों तक की हो सकती है।
UFlags पैरामीटर आइकन को एप्लिकेशन संदेशों को संसाधित करने के लिए सेट करने के लिए सेट है, एप्लिकेशन के आइकन और उसके टिप का उपयोग करें। uCallbackMessage अनुप्रयोग-निर्धारित संदेश पहचानकर्ता को इंगित करता है। सिस्टम अधिसूचना संदेशों के लिए निर्दिष्ट पहचानकर्ता का उपयोग करता है जो इसे Wnd द्वारा पहचाने गए विंडो पर भेजता है जब भी आइकन की बाउंडिंग आयत में माउस घटना होती है। यह पैरामीटर प्रपत्र इकाई के इंटरफ़ेस अनुभाग में WM_ICONTRAY निरंतर परिभाषित होता है और बराबर होता है: WM_USER + 1;

आप 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);
समाप्त;

टास्क बार से एप्लिकेशन (एप्लिकेशन का बटन) को छिपाने के लिए हम एक सरल ट्रिक का उपयोग करेंगे। प्रोजेक्ट्स स्रोत कोड में निम्न पंक्ति जोड़ें: अनुप्रयोग। ShowMainForm: = गलत; आवेदन से पहले। CreateForm (TMainForm, MainForm); जैसे इसे देखने दें:

...
शुरू
आवेदन। प्रारंभ;
आवेदन। ShowMainForm: = गलत;
आवेदन। CreateForm (TMainForm, MainForm);
आवेदन। Daud;
समाप्त।

और अंत में, हमारे ट्रे आइकन को माउस घटनाओं पर प्रतिक्रिया देने के लिए, हमें एक संदेश हैंडलिंग प्रक्रिया बनाने की आवश्यकता है। सबसे पहले, हम प्रपत्र घोषणा के सार्वजनिक भाग में एक संदेश हैंडलिंग प्रक्रिया की घोषणा करते हैं: प्रक्रिया ट्रायमेसेज (var Msg: TMessage); संदेश WM_ICONTRAY; दूसरा, इस प्रक्रिया की परिभाषा इस प्रकार है:

प्रक्रिया TMainForm। TrayMessage (वर Msg: TMessage);
begincase Msg.lParam का
WM_LBUTTONDOWN:
शुरू
ShowMessage ('वाम बटन पर क्लिक किया गया
- लेट्स शो द फॉर्म! ');
मुख्य रूप। प्रदर्शन;
समाप्त;
WM_RBUTTONDOWN:
शुरू
ShowMessage ('राइट बटन पर क्लिक किया गया
- लेट'स हिड द फॉर्म! ');
मुख्य रूप। छिपाना;
समाप्त;
समाप्त;
समाप्त;

यह प्रक्रिया केवल हमारे संदेश, WM_ICONTRAY को संभालने के लिए डिज़ाइन की गई है। यह संदेश संरचना से LParam मूल्य लेता है जो हमें प्रक्रिया की सक्रियता पर माउस की स्थिति दे सकता है। सादगी के लिए हम केवल बाईं माउस डाउन (WM_LBUTTONDOWN) और राइट माउस डाउन (WM_RBUTTONDOWN) को संभालेंगे। जब बाईं माउस बटन आइकॉन पर होता है तो हम मुख्य रूप दिखाते हैं, जब दायाँ बटन दबाया जाता है तो हम उसे छिपाते हैं। बेशक, अन्य माउस इनपुट संदेश हैं जो आप प्रक्रिया में संभाल सकते हैं, जैसे, बटन अप, बटन डबल क्लिक आदि।

बस। जल्द और आसान। इसके बाद, आप देखेंगे कि ट्रे में आइकन को कैसे चेतन करें और उस आइकन को आपके एप्लिकेशन की स्थिति कैसे दर्शाते हैं। इससे भी अधिक, आप देखेंगे कि आइकन के पास पॉप-अप मेनू कैसे प्रदर्शित किया जाए।

instagram story viewer