Boodschap in de fles

Delphi, je hebt een boodschap om af te handelen!

Een van de sleutels tot traditionele Windows-programmering is het omgaan met berichten verzonden door Windows naar applicaties. Simpel gezegd, een bericht is informatie die van de ene plaats naar de andere wordt verzonden. Voor het grootste deel maakt Delphi het verwerken van berichten eenvoudig door het gebruik van gebeurtenissen, een gebeurtenis wordt meestal gegenereerd in reactie op een Windows-bericht dat naar een toepassing wordt verzonden.

Op een dag wilt u misschien enkele ongewone berichten verwerken, zoals: CM_MOUSEENTER wat gebeurt (wordt geplaatst door Windows) wanneer de muiscursor het clientgebied van een component (of formulier) binnengaat.

Zelf berichten verwerken vereist een paar extra programmeertechnieken, dit artikel is er om ons te helpen de juiste weg te vinden door de berichtenrivier en benodigde informatie.

Strategieën om Windows-berichten te manipuleren met Delphi

  • Sleep een venster: geen titelbalk! Hoe kun je zo'n venster slepen? Het is gemakkelijk en leuk: laten we een Delphi-formulier verplaatsen door te klikken (en te slepen) in het clientgebied. Het belangrijkste idee is om het bericht wm_NCHitTest windows te bemachtigen.
  • Hoe informatie (String, Afbeelding, Record) te verzenden tussen twee Delphi-applicaties (WM_CopyData): Leer hoe u het WM_CopyData-bericht tussen twee Delphi-applicaties kunt verzenden om informatie uit te wisselen en twee applicaties te laten communiceren. De bijbehorende broncode laat zien hoe u een string, record (complex gegevenstype) en zelfs afbeeldingen naar een andere toepassing kunt verzenden.
  • Sticky Windows: met deze strategie kunt u uw Delphi-formulieren aan de randen van uw bureaublad koppelen.
  • Wijzigingen in het register bijhouden: moet u op de hoogte worden gebracht van wijzigingen in de kenmerken of inhoud van een opgegeven registersleutel? Dan bent u klaar voor uw Delphi-codetoolkit.
  • Berichten verzenden naar niet-Windows-toepassingen: deze strategie wordt gebruikt om berichten (signalen) naar niet-Windows-toepassingen te verzenden met AllocateHWND en DefWindowProc. U moet begrijpen wat Delphi op de achtergrond doet om Windows-berichten te onderscheppen, hoe u uw eigen berichtenhandler kunt schrijven voor een toepassing in een venster en hoe u een unieke bericht-id kunt verkrijgen die u veilig in uw toepassingen kunt gebruiken. Er is ook een kleine fout in de Delphi DeallocateHWND-procedure die u onderweg kunt oplossen.
  • Het aantal toepassingsinstanties beheren: in dit artikel leert u hoe u een Delphi-toepassing "eenmalig inschakelt" die kan controleren op de vorige (actieve) instantie. Tijdens het proces zullen verschillende technieken voor het implementeren van een dergelijke controle worden besproken; evenals hoe u uw reeds actieve toepassing op de voorgrond kunt brengen, als een gebruiker het probeert "nog een keer" uit te voeren. Aan het einde van het artikel heb je een copy-to-go-code om het gedrag van de meerdere exemplaren van je applicatie te beheren: met de optie om het aantal actieve exemplaren te beperken.
  • Hoe om te gaan met systeemtijdverandering met Delphi-code: als u moet reageren wanneer de systeemdatum is gewijzigd, kunt u het bericht WM_TimeChange Windows verwerken.
  • Hoe aangepaste tekst te tekenen op de bijschriftbalk van een Delphi-formulier: als u wat aangepaste tekst wilt toevoegen aan de bijschriftbalk van een formulier, zonder de eigenschap Bijschrift van het formulier te wijzigen, moet u een speciaal Windows-bericht verwerken: WM_NCPAINT (samen met WM_NCACTIVATE ).
  • Tips voor menu-items weergeven: volgens (Windows) ontwerp, in Delphi-applicaties, worden hints die zijn toegewezen aan menu-items niet weergegeven in het pop-upvenster (wanneer de muis over een menu zweeft).
  • Weergaveapparaatmodi ophalen, instellen en verwerken (schermresolutie en kleurdiepte): met deze strategie kunt u de instellingen van de Windows-weergavemodus (resolutie en kleurdiepte) van Delphi-code wijzigen. U kunt ook het Windows-bericht WM_DISPLAYCHANGE verwerken dat naar alle vensters wordt verzonden wanneer de schermresolutie is gewijzigd.
  • Huidige URL ophalen van IE: er is een Delphi-tactiek om de volledige URL op te halen van alle geopende exemplaren van Internet Explorer.
  • Afsluiten van Windows detecteren en voorkomen: u kunt Delphi gebruiken om de afsluitactie van Windows te annuleren.
  • Een wachtwoorddialoogvenster weergeven: stel dat u een gegevenskritisch type toepassing hebt waarvan u niet wilt dat een niet-geautoriseerde gebruiker met de gegevens werkt. Wat als u een wachtwoorddialoogvenster * moet weergeven voordat * de toepassing wordt hersteld om te controleren of een geautoriseerde gebruiker er toegang toe heeft.
  • De Windows-beperking op minimale formuliergrootte verwijderen: volgens Windows-ontwerp heeft een formulier (venster) een formaatbeperking die de minimale formulierhoogte instelt op de hoogte van de titelbalk en de breedte op 112 pixels (118 in XP-thema).
  • De OnClose (OnPopDown) -gebeurtenis van een TPopupMenu detecteren: Helaas onthult het TPopupMenu geen gebeurtenis die u kunt afhandelen die wordt geactiveerd wanneer het menu wordt gesloten - nadat een gebruiker een item in het menu heeft geselecteerd of een ander UI-element heeft geactiveerd.
  • Berichten naar een toepassing overvullen: "... Delphi toont de OnMessage-gebeurtenis voor het toepassingsobject. De OnMessage-gebeurtenishandler is" verondersteld "om u in staat te stellen elk bericht te vangen dat naar uw toepassing wordt verzonden ..."