Munka ablakok Delphi segítségével api

Munka ablakok DELPHI az API használatával.

Miért van az összes szükséges ez? A bemutatott példák ebben a cikkben, hogy egy ötlet, hogy a Windows-alapú alkalmazás, valamint a legfontosabb fogalmak az operációs rendszer. Ez mind egy útmutató a fellépés, és felülvizsgálja a legalapvetőbb jellemzői API funkciókat. Az itt bemutatott példák világosan mutatják az egyes szakaszok a papír, és alapjául szolgálhat, az úgynevezett alapot a további folytatását a tanulmány az ideológia a Windows.

Most próbálom megmagyarázni, mi ez a program is megteszi, de csak akkor, ha ő nem. Amellett, hogy a példa alkönyvtár Ex01 szükségünk van egy másik projekt, csak az egyik formája, az úgynevezett „Form1”, több mint a projekt nem tartalmaz semmit. Amikor elindítja az első program, akkor megjelenik egy formája „form2” gomb „Button1”

Munka ablakok Delphi segítségével api

kattintva, hogy megkapjuk:

Ha letölthető a projekt formájában Form1, majd kattintson a Button1 alkotnak form2, megkapjuk a választ:

Ez azt jelenti, hogy ha megnyomja a „Button1” gombra, egy üzenet jelenik meg, hogy az ablak nyitva van osztályban, regisztrált az operációs rendszer, mint a „TForm1”, amelyek „Form1” fejléc. Ahhoz, hogy megtalálja a kívánt ablakban használjuk a FindWindow. amelynek két paramétert, az első - az ablakok, a második osztály - a nevét, de ha a címe a kívánt ablakot közömbös, a második dokumentumot, akkor be kell állítani a nulla. vagy, ha érdekel az osztály, akkor meg kell határozni a nulla. például: FindWindow (nulla, Winamp); Ebben az esetben a függvény fog keresni egy ablak nevére winamp, ez nem tesz különbséget, mi osztály van, és nem érdekel az eredete az ablakon, hogy ez a projekt DELPHI, vagy az Internet Explorer, vagy a Notepad. FindWindow függvény a megadott értéket, válaszul a fajta HWND - utalás a talált ablakot, vagy null, ha az ablak nem található.

A példánkban definiálunk egy változót H, mint HWND. hogy kiegyenlíti annak értékét FindWindow funkciót. Meg kell jegyezni, hogy a nevét, a forma, a Delphi project fontos, hogy ne csak a design, hanem az alkalmazás során. Ha elkezd egy új projekt, az úgynevezett forma néhány nagyon hosszú neve és összeállítja a projekt, majd összehasonlítani a méret a lefordított modul a mérete az első projekt, azt látjuk, hogy nőtt - nőtt csak a rovására egy hosszú osztály neve. Azt is meg kell jegyezni, hogy kívánatos, hogy hívja forma eltér a megadott alapértelmezés DELPHI.

Az ablak. nélkül fókusz, üzeneteket és reagál rájuk. Egy példa erre egy alkönyvtár Ex02
eljárás TForm2.FormMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Egész szám);
kezdődik
Caption: = 'x =' + IntToStr (X) + 'y =' + IntToStr (Y)
végén;

Ha az egér kurzor, így a cím kimeneti koordinátákat.

Munka ablakok Delphi segítségével api

Futó két esetben a program, azt látjuk, hogy a doboz nincs fókusz, azaz inaktív, reagál a mutató mozgását a felszínén, és az eredményt a fejlécben a jelenlegi koordinátái a kurzort a koordináta-rendszerben. Hivatkozással az ablakot, az alkalmazás végezhet vele minden (majdnem) az akció üzenetváltásnak azt. Az alkönyvtár Ex03 eljárás préselést a következőképpen módosul:
eljárás TForm2.Button1Click (Sender: TObject);
var
H. HWND;
kezdődik
H: = FindWindow ( 'TForm1', 'Form1');
Ha H <> 0, akkor SendMessage (H, WM_CLOSE, 0, 0)
végén;

Ha több ablak az osztály „TForm1”. és annak szükségességét, hogy zárja mindegyiket automatikusan, ez történik Ex04 alábbiak szerint:
eljárás TForm2.Button1Click (Sender: TObject);
var
H. HWND;
kezdődik
ismétlés
H: = FindWindow ( 'TForm1', 'Form1');
Ha H <> 0, akkor SendMessage (H, WM_CLOSE, 0, 0)
Amíg H = 0;
végén;

Hogyan működik alkalmazások ablak osztály nem ismert, mivel nem kell a forráskódot? Ahhoz, hogy megoldja ezeket a problémákat Ws32 segédprogramot. mellékelt DELPHI. Még azt is hozzá, hogy például, hogy minimalizálja az ablakot. ablak üzenet elküldése WM_SYSCOMMAND. megfelelő intézkedés „kiválasztó ablak rendszer menüben.” A harmadik paraméter SendMessage funkció beállítása SC_MINIMIZE. Egy példa erre a Ex06.

Miért DELPHI alkalmazások nagy? Minimum prelozhenie létre különböző változatai DELPHI. Ez elérheti 170-290 Kbyte. A nagy méret a lefordított alkalmazás egy árat kell fizetni a hihetetlen komfort design. feltéve DELPHI. Építészet programozási környezet, az RTTI, alkatrész megközelítés - mindezt teszi DELPHI figyelemreméltóan hatékony eszköz, de nem kell ezeket a hasznos funkciókat a középkategóriás alkalmazások. Az összeállított modul tartalmazza az összes kódot interface input-output elemek. Megszabadulni RTTI lehetetlen, hogy radikálisan oldja meg a problémát csak nem a Delphi osztály könyvtár. azaz Programozás nélkül VCL.

A lista csak akkor használja a két modul - a Windows és a feladás - csak API funkciókat. így a kód olyan hosszú, hogy hasonlít a C nyelvet.

Következtetés a GDI

A Ex09 alkönyvtár lehet vizsgálni a régi formáját form2. de egy új gomb „téglalap”. kóddal préselés során:
eljárás TForm2.Button2Click (Sender: TObject);
var
dc. HDC;
kezdődik
dc: = GetDC (fogantyú);
Téglalap (dc, 10, 10, 110, 110);
ReleaseDC (fogantyú, dc);
DeleteDC (dc);
végén;

Indítsa el az alkalmazást, és kattintson a „téglalap” gombra. kapjuk:

Munka ablakok Delphi segítségével api

Az ablak a referencia értéke nulla megfelel az asztalon. Példa Ex11 megmutatja, hogyan kell felhívni a tér az asztalon, nem kell mondani, amit a jelöltek meg előttünk:
eljárás TForm2.Button2Click (Sender: TObject);
var
dc. HDC;
kezdődik
dc: = GetDC (0);
Téglalap (dc, 10, 10, 110, 110);
ReleaseDC (fogantyú, dc);
DeleteDC (DC);
végén;
végén.

Munka ablakok Delphi segítségével api

A project ablakban funkció Ex12 alapszintű program egészíti feldolgozás WM_PAINT üzeneteket. A következtetés készül a sorok között egy hívás funkciót BeginPaint és EndPaint. amelyek közül az első visszatér egy hivatkozást készülék kontextusban, azaz értékelik HDC típusú. szükséges GDI kimeneti funkciókat. Miután a kapcsolatokat el kell távolítani a végén a munka - szükség van a helyes működéshez a kérelmet.

Munka ablakok Delphi segítségével api

A projekt Ex13 fogunk újra programozni nélkül VCL, a kihívás az, hogy ha duplán kattint az egér bal gomb megjeleníti az aktuális pozíció mutatót. Constant cs_DblClks. úgy, hogy az ablak lehet reagálni a dupla kattintás, és ablak funkció feltöltik feldolgozás wm_LButtonDblClk kommunikáció, amely koordinálja a kurzor jelenik meg.

Az EX14 projektben létrehozott kezelője ugyanazt az üzenetet a projektben DELPHI hagyományos típusúak. üzenet jelzi, hogy az eljárás az, hogy elkapjam egy üzenetet, amely jelzi mnemonikot a szót. Tehát itt elfogott üzenet „Kattintson duplán a”.

Az EX15 létre felvezető ondblclick események

Az EX16 létre felvezető WM_PAINT üzenete - átfestés az ablakot. BeginPaint és EndPaint vonalak vannak jelen a helyes működését az alkalmazás, amikor eltávolítjuk, van egy kellemetlen vibrálás, amikor az ablak átméretezésekor.

Munka az időzítő

Ebben a részben áttekintjük, hogyan kell használni az időzítőt, amely csak az API funkciókat. Ennek egyik példája a projekt EX17, ami idővel változtatja színét festett körökben. Az első dolog, amit figyelembe, hogy a blokk állandók leírja a hozzáadott leírása időzítő azonosítót is igénybe vehet bármely egész:
const
AppName = 'WinPaint';
id_Timer = 100; // azonosítója időzítő

Határozza meg az időzítő van szükség, mert az alkalmazás lehet, hogy több. Annak érdekében, hogy taymeraispolzuem API SetTimer funkciót. ahol a kívánt időzítő van beállítva:
SetTimer (Ablak, id_Timer, 200, nulla); // beállított időzítő

Ha a program által használt több időzítő, akkor szét kell választani őket érték azonosítók továbbított wParam. Ebben a példában minden 200 ms ablak rajzolni meghívásával API InvalidRect funkciót. Bögre színe is változik:
Brush: = CreateSolidBrush (RGB (random (255), random (255), random (255)));

Szokás a Windows, objektumok létrehozásához el kell távolítani használat után, így nem nyelik források. Ha törölni egy időzítővel KillTimer híváskezelő wm_Destroy üzenetét.
KillTimer (Ablak, id_Timer);

Ebben az áttekintésben az API funkciók működnek ablakok DELPHI befejeződött.