Messaggio in bottiglia

Delphi, hai un messaggio da gestire!

Una delle chiavi della programmazione tradizionale di Windows è la gestione di messaggi inviato da Windows alle applicazioni. In poche parole, un messaggio è alcune informazioni inviate da un luogo all'altro. Per la maggior parte, Delphi semplifica la gestione dei messaggi attraverso l'uso di eventi, in genere un evento viene generato in risposta a un messaggio di Windows inviato a un'applicazione.

Tuttavia, un giorno potresti voler elaborare alcuni messaggi non comuni come: CM_MOUSEENTER che si verifica (è pubblicato da Windows) quando il cursore del mouse entra nell'area client di un componente (o modulo).

Gestire i messaggi da soli richiede alcune tecniche di programmazione extra, questo articolo è qui per aiutarci a trovare la strada giusta attraverso il messaggio fiume e raccogliere le informazioni necessarie.

Strategie per manipolare i messaggi di Windows con Delphi

  • Trascina una finestra: nessuna barra del titolo! Come puoi trascinare una finestra del genere? È facile e divertente: muoviamo un modulo Delphi facendo clic (e trascinandolo) nell'area client. L'idea principale è mettere le mani sul messaggio di Windows wm_NCHitTest.
  • Come inviare informazioni (String, Image, Record) tra due applicazioni Delphi (WM_CopyData): Scopri come inviare il messaggio WM_CopyData tra due applicazioni Delphi per scambiare informazioni e far comunicare due applicazioni. Il codice sorgente allegato mostra come inviare una stringa, registrare (tipo di dati complessi) e persino grafica a un'altra applicazione.
  • Windows appiccicoso: questa strategia consente di agganciare i moduli Delphi ai bordi dello schermo del desktop.
  • Monitoraggio delle modifiche al Registro di sistema: è necessario ricevere notifiche sulle modifiche agli attributi o al contenuto di una chiave del Registro di sistema specificata? Allora sei pronto per questo tuo toolkit di codice Delphi.
  • Invio di messaggi ad applicazioni senza finestre: questa strategia viene utilizzata per inviare messaggi (segnali) ad applicazioni senza finestre utilizzando AllocateHWND e DefWindowProc. Dovresti capire cosa fa Delphi in background per intercettare i messaggi di Windows, come puoi scrivere il tuo gestore di messaggi per un'applicazione con finestra e come ottenere un identificatore di messaggio univoco che puoi usare in sicurezza nelle tue applicazioni. C'è anche un piccolo bug nella procedura Delphi DeallocateHWND che puoi correggere lungo la strada.
  • Controllo del numero di istanze dell'applicazione: in questo articolo imparerai come "abilitare run-once" un'applicazione Delphi che può verificare la sua precedente istanza (in esecuzione). Nel corso del processo, verranno discusse diverse tecniche di attuazione di tale controllo; nonché come portare in primo piano l'applicazione già in esecuzione, se un utente tenta di eseguirla "ancora una volta". Entro la fine dell'articolo avrai un codice copia per andare a controllare il comportamento delle istanze multiple della tua applicazione: con l'opzione per limitare il numero di istanze in esecuzione.
  • Come gestire la modifica dell'ora di sistema utilizzando il codice Delphi: se è necessario reagire quando l'ora della data di sistema è cambiata, è possibile gestire il messaggio Windows WM_TimeChange.
  • Come disegnare testo personalizzato su una barra dei sottotitoli di un modulo Delphi: se si desidera aggiungere del testo personalizzato sulla barra dei sottotitoli di un modulo, senza modificare la proprietà Caption del modulo è necessario gestire un messaggio Windows speciale: WM_NCPAINT (insieme a WM_NCACTIVATE ).
  • Come visualizzare i suggerimenti sulle voci di menu: in base alla progettazione (Windows), nelle applicazioni Delphi, i suggerimenti assegnati alle voci di menu non vengono visualizzati nella finestra della descrizione comandi (quando il mouse passa sopra un menu).
  • Ottieni, imposta e gestisci le modalità del dispositivo di visualizzazione (risoluzione dello schermo e profondità del colore): questa strategia ti consente di modificare le impostazioni della modalità di visualizzazione di Windows (risoluzione e profondità del colore) dal codice Delphi. Puoi anche gestire il messaggio WM_DISPLAYCHANGE di Windows inviato a tutte le finestre quando la risoluzione del display è cambiata.
  • Ottieni URL corrente da IE: esiste una tattica di Delphi per recuperare l'URL completo di tutte le istanze di Internet Explorer aperte.
  • Rilevamento e prevenzione dell'arresto di Windows: è possibile utilizzare Delphi per annullare a livello di codice l'azione di spegnimento di Windows.
  • Visualizza una finestra di dialogo password: supponi di avere un tipo di applicazione critica per i dati in cui non vorresti che un utente non autore lavorasse con i dati. Cosa succede se è necessario visualizzare una finestra di dialogo password * prima * l'applicazione viene ripristinata per assicurarsi che un utente autorizzato acceda ad essa.
  • Rimuovere il vincolo di Windows sulla dimensione minima del modulo: in base alla progettazione di Windows, un modulo (finestra) ha un vincolo di dimensione che imposta l'altezza minima del modulo all'altezza della barra della didascalia e la larghezza a 112 pixel (tema 118 in XP).
  • Come rilevare un evento OnClose (OnPopDown) di TPopupMenu: Sfortunatamente, TPopupMenu non espone un evento che è possibile gestire che verrà generato quando il menu viene chiuso - dopo che un utente ha selezionato un elemento dal menu o ha attivato qualche altro elemento dell'interfaccia utente.
  • Trapping dei messaggi inviati a un'applicazione: "... Delphi presenta l'evento OnMessage per l'oggetto Application. Il gestore eventi OnMessage è" supposto "per permetterti di intercettare ogni messaggio inviato all'applicazione ..."