Nachricht in der Flasche

Delphi, du musst mit der Nachricht umgehen!

Einer der Schlüssel zur traditionellen Windows-Programmierung ist der Umgang mit dem Mitteilungen von Windows an Anwendungen gesendet. Kurz gesagt, eine Nachricht besteht aus Informationen, die von einem Ort zum anderen gesendet werden. In den meisten Fällen vereinfacht Delphi die Nachrichtenverarbeitung durch die Verwendung von Ereignissen. In der Regel wird ein Ereignis als Antwort auf eine Windows-Nachricht generiert, die an eine Anwendung gesendet wird.

Möglicherweise möchten Sie jedoch eines Tages einige ungewöhnliche Nachrichten verarbeiten, z. B .: CM_MOUSEENTER, die auftreten (von Windows bereitgestellt), wenn der Mauszeiger in den Clientbereich einer Komponente (oder eines Formulars) gelangt..

Das eigenständige Verarbeiten von Nachrichten erfordert einige zusätzliche Programmiertechniken. Dieser Artikel soll uns dabei helfen, den richtigen Weg durch den Nachrichtenfluss zu finden und die benötigten Informationen zu erfassen.

Strategien zum Bearbeiten von Windows-Nachrichten mit Delphi

  • Fenster ziehen: Keine Titelleiste! Wie kann man so ein Fenster ziehen? Es ist einfach und macht Spaß: Lassen Sie uns ein Delphi-Formular verschieben, indem Sie in dessen Client-Bereich klicken (und ziehen). Die Hauptidee ist, die Windows-Nachricht wm_NCHitTest in die Hände zu bekommen.
  • So senden Sie Informationen (String, Image, Record) zwischen zwei Delphi-Anwendungen (WM_CopyData): Erfahren Sie, wie Sie die WM_CopyData-Nachricht zwischen zwei Delphi-Anwendungen senden, um Informationen auszutauschen und zwei Anwendungen zur Kommunikation zu bringen. Der beiliegende Quellcode zeigt, wie ein String, ein Datensatz (komplexer Datentyp) und sogar Grafiken an eine andere Anwendung gesendet werden.
  • Sticky Windows: Mit dieser Strategie können Sie Ihre Delphi-Formulare an die Ränder Ihres Desktop-Bildschirms andocken.
  • Überwachen von Registrierungsänderungen: Müssen Sie über Änderungen an den Attributen oder Inhalten eines bestimmten Registrierungsschlüssels benachrichtigt werden? Dann sind Sie bereit für Ihr Delphi Code Toolkit.
  • Senden von Nachrichten an Anwendungen ohne Fenster: Diese Strategie wird zum Senden von Nachrichten (Signalen) an Anwendungen ohne Fenster mithilfe von AllocateHWND und DefWindowProc verwendet. Sie sollten verstehen, was Delphi im Hintergrund tut, um Windows-Nachrichten abzufangen, wie Sie einen eigenen Nachrichtenhandler für eine fensterbasierte Anwendung schreiben und wie Sie eine eindeutige Nachrichten-ID erhalten, die Sie sicher in Ihren Anwendungen verwenden können. Es gibt auch einen kleinen Fehler in der Delphi DeallocateHWND-Prozedur, den Sie unterwegs beheben können.
  • Steuern der Anzahl der Anwendungsinstanzen: In diesem Artikel erfahren Sie, wie Sie eine Delphi-Anwendung "einmal ausführen", um zu überprüfen, ob die vorherige (ausgeführte) Instanz vorhanden ist. Während des Prozesses werden verschiedene Techniken zur Implementierung einer solchen Überprüfung diskutiert. sowie wie Sie Ihre bereits laufende Anwendung in den Vordergrund stellen, wenn ein Benutzer versucht, sie "noch einmal" auszuführen. Am Ende des Artikels steht ein Code zum Mitnehmen zur Verfügung, mit dem Sie das Verhalten mehrerer Instanzen Ihrer Anwendung steuern können: Mit der Option, die Anzahl der ausgeführten Instanzen zu begrenzen.
  • Behandeln von Systemzeitänderungen mit Delphi-Code: Wenn Sie reagieren müssen, wenn sich die Systemzeit geändert hat, können Sie die Windows-Meldung WM_TimeChange behandeln.
  • So zeichnen Sie benutzerdefinierten Text in der Beschriftungsleiste eines Delphi-Formulars: Wenn Sie der Beschriftungsleiste eines Formulars benutzerdefinierten Text hinzufügen möchten, ohne die Caption-Eigenschaft des Formulars zu ändern, müssen Sie eine spezielle Windows-Nachricht verarbeiten: WM_NCPAINT (zusammen mit WM_NCACTIVATE ).
  • So zeigen Sie Menüelementhinweise an: In Delphi-Anwendungen werden Hinweise, die Menüelementen zugewiesen sind, von Windows nicht im Popup-Tooltip-Fenster angezeigt (wenn Sie den Mauszeiger über ein Menü bewegen)..
  • Abrufen, Festlegen und Behandeln von Anzeigegerätemodi (Bildschirmauflösung und Farbtiefe): Mit dieser Strategie können Sie die Einstellungen für den Windows-Anzeigemodus (Auflösung und Farbtiefe) in Delphi-Code ändern. Sie können auch die Windows-Meldung WM_DISPLAYCHANGE verarbeiten, die an alle Fenster gesendet wird, wenn sich die Anzeigeauflösung geändert hat.
  • Aktuelle URL vom IE abrufen: Es gibt eine Delphi-Taktik, um die vollständige URL aller geöffneten Internet Explorer-Instanzen abzurufen.
  • Erkennen und Verhindern des Herunterfahrens von Windows: Sie können Delphi verwenden, um das Herunterfahren von Windows programmgesteuert abzubrechen.
  • Anzeigen eines Kennwortdialogs: Angenommen, Sie haben einen datenkritischen Anwendungstyp, bei dem Sie nicht möchten, dass ein nicht autorisierter Benutzer mit den Daten arbeitet. Was ist, wenn Sie ein Kennwortdialogfeld anzeigen müssen, * bevor * die Anwendung wiederhergestellt wird, um sicherzustellen, dass ein autorisierter Benutzer darauf zugreift?.
  • Entfernen der Windows-Einschränkung für die minimale Formulargröße: Bei Windows-Entwurf hat ein Formular (Fenster) eine Größenbeschränkung, die die minimale Formularhöhe auf die Höhe der Beschriftungsleiste und die Breite auf 112 Pixel festlegt (118 in XP-Design)..
  • Erkennen des OnClose (OnPopDown) -Ereignisses eines TPopupMenu: Leider macht das TPopupMenu kein Ereignis verfügbar, das beim Schließen des Menüs ausgelöst wird - entweder nachdem ein Benutzer ein Element aus dem Menü ausgewählt oder ein anderes Benutzeroberflächenelement aktiviert hat.
  • Überfüllen von an eine Anwendung gesendeten Nachrichten: "... Delphi zeigt das OnMessage-Ereignis für das Application-Objekt an. Die OnMessage-Ereignisbehandlungsroutine soll es Ihnen ermöglichen, jede an Ihre Anwendung gesendete Nachricht zu überfüllen ..."