En av nycklarna till traditionell Windows-programmering är att hantera meddelanden skickas av Windows till applikationer. Enkelt uttryckt är ett meddelande information som skickas från en plats till en annan. För det mesta gör Delphi enkel hantering av meddelanden genom att använda händelser, en händelse genereras vanligtvis som svar på att ett Windows-meddelande skickas till en applikation.
Men en dag kanske du vill behandla några ovanliga meddelanden som: CM_MOUSEENTER som händer (läggs upp av Windows) när muspekaren kommer in i klientområdet för någon komponent (eller form).
Att hantera meddelanden på egen hand kräver några extra programmeringstekniker, den här artikeln är här för att hjälpa oss hitta rätt sätt genom meddelandefloden och ta tag i information som behövs.
Strategier för att hantera Windows-meddelanden med Delphi
Dra ett fönster: Ingen titelrad! Hur kan du dra ett sådant fönster? Det är enkelt och roligt: låt oss flytta en Delphi-form genom att klicka (och dra) i klientområdet. Huvudtanken är att få tag på wm_NCHitTest-meddelandet.
Hur man skickar information (String, Image, Record) mellan två Delphi-applikationer (WM_CopyData): Lär dig hur du skickar WM_CopyData-meddelandet mellan två Delphi-applikationer för att utbyta information och få två applikationer att kommunicera. Den medföljande källkoden visar hur man skickar en sträng, post (komplex datatyp) och till och med grafik till en annan applikation.
Klibbiga Windows: Med denna strategi kan du docka dina Delphi-formulär till kanterna på din stationära skärm.
Övervaka registerändringar: Behöver du bli meddelad om ändringar i attribut eller innehåll i en specificerad registernyckel? Då är du redo för den här verktygssatsen för Delphi-kod.
Skicka meddelanden till icke-blåsade applikationer: Denna strategi används för att skicka meddelanden (signaler) till icke-fönstrade applikationer med AllocateHWND och DefWindowProc. Du bör förstå vad Delphi gör i bakgrunden för att fånga Windows-meddelanden, hur kan du skriva din egen meddelandeshanterare för ett fönstret program och hur du får en unik meddelanden identifierare som du säkert kan använda i dina applikationer. Det finns också ett litet fel i Delphi DeallocateHWND-proceduren som du kan fixa på vägen.
Kontrollera antalet applikationsinstanser: I den här artikeln lär du dig att "köra en gång aktivera" en Delphi-applikation som kan kontrollera om dess tidigare (igång) instans. Längs processen diskuteras flera tekniker för att implementera en sådan kontroll; liksom hur du tar med ditt redan körda program i förgrunden, om en användare försöker köra den "en gång till". I slutet av artikeln har du en kopia-till-gå-kod för att kontrollera beteendet hos din applikations flera instanser: med möjlighet att begränsa antalet körande instanser.
Hur man hanterar ändring av systemtid med Delphi-kod: Om du behöver reagera när systemdatumet har ändrats kan du hantera meddelandet WM_TimeChange Windows.
Så här ritar du anpassad text på ett bildtexter i en Delphi-formulär: Om du vill lägga till lite anpassad text i bildtexten på ett formulär utan att ändra bildtexten för formen måste du hantera ett speciellt Windows-meddelande: WM_NCPAINT (tillsammans med WM_NCACTIVATE ).
Hur man visar tips på menyalternativ: Med (Windows) design, i Delphi-applikationer, visas inte tips som tilldelas menyalternativ i popup-verktygstipsfönstret (när musen svävar över en meny).
Hämta, ställa in och hantera visningsenhetslägen (skärmupplösning och färgdjup): Med denna strategi kan du ändra inställningarna för Windows visningsläge (upplösning och färgdjup) från Delphi-kod. Du kan också hantera WM_DISPLAYCHANGE Windows-meddelandet som skickas till alla fönster när skärmupplösningen har ändrats.
Hämta aktuell URL från IE: Det finns en Delphi-taktik för att hämta hela URL: en för alla öppnade Internet Explorer-instanser.
Upptäcka och förhindra avstängning av Windows: Du kan använda Delphi för att programmera avbryta Windows-avstängning.
Visa en lösenorddialog: Anta att du har en datakritisk applikationstyp där du inte vill att en icke-författad användare ska arbeta med data. Vad händer om du behöver visa en lösenorddialog * innan * programmet återställs för att se till att en auktoriserad användare får åtkomst till den.
Ta bort Windows-begränsningen för minsta formstorlek: Genom Windows-design har ett formulär (fönster) en storleksbegränsning som sätter minsta formhöjd till höjden på bildtexten och bredden till 112 pixlar (118 i XP-tema).
Hur man upptäcker en TPopupMenus OnClose (OnPopDown) -händelse: Tyvärr exponerar TPopupMenu inte en händelse du kan hantera som kommer att avfyras när menyn stängs - antingen efter att en användare har valt ett objekt från menyn eller har aktiverat något annat UI-element.
Fånga meddelanden skickade till ett program: "... Delphi ytar OnMessage-händelsen för applikationsobjektet. Händelseshanteraren OnMessage är" tänkt "så att du kan fånga alla meddelanden som skickas till din applikation ..."