Δίσκος εφαρμογών συστήματος δίσκων

Ρίξτε μια ματιά στη γραμμή εργασιών σας. Δείτε την περιοχή όπου βρίσκεται ο χρόνος; Υπάρχουν άλλα εικονίδια εκεί; Ο τόπος ονομάζεται Δίσκος συστήματος των Windows. Θα θέλατε να τοποθετήσετε το δικό σας Δελφοί εικονίδιο της εφαρμογής εκεί; Θα θέλατε να εμφανίζεται το εικονίδιο αυτό - ή να αντικατοπτρίζει την κατάσταση της αίτησής σας;

Αυτό θα ήταν χρήσιμο για προγράμματα που παραμένουν σε λειτουργία για μεγάλες χρονικές περιόδους χωρίς αλληλεπίδραση χρήστη (εργασίες στο παρασκήνιο που συνήθως συνεχίζετε να εκτελείτε στον υπολογιστή σας όλη την ημέρα).

Αυτό που μπορείτε να κάνετε είναι να κάνετε τις εφαρμογές Delphi να μοιάζουν σαν να ελαχιστοποιούν το δίσκο (αντί για το Γραμμή εργασιών, δεξιά στο κουμπί "Εκκίνηση Win") τοποθετώντας ένα εικονίδιο στο δίσκο και πραγματοποιώντας ταυτόχρονα τις φόρμες σας, αόρατος.

Ας το τράνταγμα

Ευτυχώς, η δημιουργία μιας εφαρμογής που τρέχει στο δίσκο του συστήματος είναι αρκετά εύκολη - για την ολοκλήρωση της εργασίας απαιτείται μόνο μία λειτουργία API (Shell_NotifyIcon).

instagram viewer

Η λειτουργία ορίζεται στο Μονάδα ShellAPI και απαιτεί δύο παραμέτρους. Η πρώτη είναι μια σημαία που υποδεικνύει αν το εικονίδιο προστίθεται, τροποποιείται ή αφαιρείται και το δεύτερο είναι ένας δείκτης σε μια δομή TNotifyIconData που περιέχει τις πληροφορίες σχετικά με το εικονίδιο. Αυτό περιλαμβάνει τη λαβή του εικονιδίου για να εμφανιστεί, το κείμενο να εμφανίζεται ως συμβουλή εργαλείου όταν το ποντίκι είναι πάνω από το εικονίδιο, το λαβή του παραθύρου που θα λάβει τα μηνύματα του εικονιδίου και τον τύπο μηνύματος που θα στείλει το εικονίδιο σε αυτό παράθυρο.

Πρώτον, στο ιδιωτικό τμήμα της κύριας σας φόρμας βάλτε τη γραμμή:
TrayIconData: TNotifyIconData;

τύπος
TMainForm = τάξη(TForm)
διαδικασία FormCreate (αποστολέας: TObject);
ιδιωτικός
TrayIconData: TNotifyIconData;
{Ιδιωτικές δηλώσεις}δημόσιο{Δημόσιες δηλώσεις}τέλος;

Στη συνέχεια, στη βασική σας μορφή OnCreate, αρχικοποιήστε τη δομή δεδομένων TrayIconData και καλέστε τη λειτουργία Shell_NotifyIcon:

με TrayIconData dobegin
cbSize: = ΜέγεθοςOf (TrayIconData);
Wnd: = Λαβή;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP.
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Εφαρμογή. Εικόνισμα. Λαβή;
StrPCopy (szTip, Εφαρμογή. Τίτλος);
τέλος;
Shell_NotifyIcon (NIM_ADD, @TrayIconData).

Η παράμετρος Wnd της δομής του TrayIconData δείχνει το παράθυρο που λαμβάνει μηνύματα ειδοποίησης που σχετίζονται με ένα εικονίδιο.

Το hIcon δείχνει το εικονίδιο που θέλουμε να προσθέσουμε στο δίσκο - στην περίπτωση αυτή χρησιμοποιείται το εικονίδιο main Applications (Εφαρμογές).
Το szTip κρατά το κείμενο του Tooltip για εμφάνιση για το εικονίδιο - στην περίπτωση μας τον τίτλο της εφαρμογής. Το szTip μπορεί να χωρέσει έως και 64 χαρακτήρες.
Η παράμετρος uFlags έχει οριστεί για να πει το εικονίδιο να επεξεργάζεται μηνύματα εφαρμογής, να χρησιμοποιεί το εικονίδιο της εφαρμογής και την άκρη της. ο uCallbackMessage υποδεικνύει τον προσδιοριστή μηνύματος που ορίζεται από την εφαρμογή. Το σύστημα χρησιμοποιεί το καθορισμένο αναγνωριστικό για τα μηνύματα ειδοποίησης που στέλνει στο παράθυρο που προσδιορίζεται από το Wnd κάθε φορά που συμβαίνει ένα συμβάν ποντικιού στο παραμεθόριο ορθογώνιο του εικονιδίου. Αυτή η παράμετρος έχει οριστεί σε WM_ICONTRAY σταθερή που ορίζεται στο τμήμα διεπαφής της μονάδας τύπων και είναι ίση με: WM_USER + 1;

Μπορείτε να προσθέσετε το εικονίδιο στο δίσκο καλώντας τη λειτουργία API Shell_NotifyIcon. Η πρώτη παράμετρος "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: = Λάθος; πριν από την Εφαρμογή. ΔημιουργίαForm (TMainForm, MainForm); Π.χ ας μοιάζει με:

...
ξεκινήσει
Εφαρμογή. Αρχικοποιήστε.
Εφαρμογή. ShowMainForm: = Λάθος;
Εφαρμογή. ΔημιουργίαForm (TMainForm, MainForm);
Εφαρμογή. Τρέξιμο;
τέλος.

Και τέλος, για να έχουμε το εικονίδιο του Δίσκου να ανταποκρίνεται στα συμβάντα του ποντικιού, πρέπει να δημιουργήσουμε μια διαδικασία χειρισμού μηνυμάτων. Πρώτον, δηλώνουμε μια διαδικασία χειρισμού μηνυμάτων στο δημόσιο μέρος της δήλωσης φόρμας: διαδικασία TrayMessage (var Msg: TMessage); μήνυμα WM_ICONTRAY; Δεύτερον, ο ορισμός αυτής της διαδικασίας μοιάζει με:

διαδικασία TMainForm. TrayMessage (var Msg: TMessage);
ξεκινήστε Msg.lParam του
WM_LBUTTONDOWN:
ξεκινήσει
ShowMessage ('Αριστερό κουμπί κλικ
- ας δείξουμε τη φόρμα! ');
MainForm. Προβολή;
τέλος;
WM_RBUTTONDOWN:
ξεκινήσει
ShowMessage ('Κάτω δεξί κλικ
- ας κρύψουμε τη φόρμα! ');
MainForm. Κρύβω;
τέλος;
τέλος;
τέλος;

Αυτή η διαδικασία έχει σχεδιαστεί για να χειρίζεται μόνο το μήνυμά μας, το WM_ICONTRAY. Παίρνει την τιμή LParam από τη δομή του μηνύματος που μπορεί να μας δώσει την κατάσταση του ποντικιού κατά την ενεργοποίηση της διαδικασίας. Για λόγους απλότητας θα χειριστούμε μόνο το αριστερό ποντίκι κάτω (WM_LBUTTONDOWN) και το δεξιό ποντίκι κάτω (WM_RBUTTONDOWN). Όταν το αριστερό κουμπί του ποντικιού βρίσκεται κάτω στο εικονίδιο, εμφανίζουμε την κύρια φόρμα, όταν το δεξί κουμπί πατηθεί, το κρύβουμε. Φυσικά, υπάρχουν και άλλα μηνύματα εισόδου του ποντικιού που μπορείτε να χειριστείτε στη διαδικασία, όπως, κουμπί επάνω, κουμπί διπλό κλικ κλπ.

Αυτό είναι. Γρηγορα και ευκολα. Στη συνέχεια, θα δείτε πώς να ζωντανέψετε το εικονίδιο στο δίσκο και πώς να το εικονίδιο αυτό να αντικατοπτρίζει την κατάσταση της αίτησής σας. Ακόμη περισσότερο, θα δείτε πώς να εμφανίζεται ένα αναδυόμενο μενού κοντά στο εικονίδιο.