|
|
Képernyővédő alkalmazás készítése
Képernyővédő 2. rész
|
|
Példaprogram letöltése
8970 bájt
|
Tovább folytatva múlt héten elkezdett képernyővédő alkalmazásunkat, ezen a héten most megvalósítjuk azt a funkciót, mely lehetővé teszi, hogy alkalmazásunk a Képernyő tulajdonságok (Display properties) - Képernyővédő (Screen saver) ablakába is kirajzolja a képernyővédőnket. Így a felhasználó még alkalmazásunk kiválasztása előtt tájékozódhat, hogy miként néz ki, ha a mi képernyővédőnk fut.
Az elkészült programnak az EXE kiterjesztését át kell neveznünk SCR-re. Erre megkérhetjük a Delphi-t is, ha a Project - Options menüpont kiválasztása után megjelenő dialóg ablakban az Application lapon az Output settings mezőnél a Target file extension-hoz beírjuk az SCR szöveget. Ekkor a létrejövő programunk automatikusan SCR kiterjesztést kap.
Ezt a programot a C:\Windows, illetve C:\WinNT könyvtárba kell elhelyeznünk. Szintén a Project - Options menüpont kiválasztása után a Directories/Conditionals lapon az Output directory mezőbe beírhatjuk, hogy a fordításkor hová kerüljön az elkészült program állománya. Ha itt megadjuk a fenti könyvtárat, akkor a Project1.scr állomány rögtön odakerül.
A demó bemutatásához a lényegi munkát már elvégeztük: múlt héten létrehoztuk azt az algoritmust, mely az animációt kirajzolja. Ez a Draw nevű eljárás, mely a Unit1.pas-ban található. Amikor indul a képernyővédőnk, akkor is ez lesz az az eljárás, melyet a kirajzoláshoz meghívunk. Mivel most ugyanazt kell kirajzolni csak nem teljes képernyő méretben, így az eljárásunk változtatás nélkül megfelel.
Amikor a Windows számára a demó kirajzolása szükséges, akkor hívja meg a programunkat a /P paraméterrel. Amint az a mellékelt példa project forrásában is látható, ilyenkor nem indítjuk el a programunkat az Applicaiton.Run-al, sőt még a Form1 létrehozására sincs szükségünk, mivel adott már az az ablak, ahová a kirajzolást el kell végeznünk. Ez az ablak a Windows Képernyő tulajdonságok ablaka.
Létrehoztunk egy Demo nevű eljárást melyet itt meghívunk. Ez végzi el a Draw meghívását.
…
3: begin//preview
Application.Initialize;
Demo(StrToInt(s2));
end;
…
Amikor a programunkat a Windows a /P paraméterrel hívja, akkor második paraméterként átad egy számot is. Ez a szám a Képernyő tulajdonságok ablakának azonosítója (Handle). Ezt az értéket adjuk át a Demo eljárásunknak.
Az eljárásban először is vizsgáljuk, hogy a paraméterként kapott ablak látható-e már. Ha igen, akkor lekérdezzük annak méretét a GetWindowRect függvénnyel. Erre szükségünk van, hiszen a Draw eljárásunknak tudnia kell, hogy mekkora a rendelkezésre álló terület a rajzoláshoz. A rajzolás elvégzéséhez létrehozunk egy TCanvas objektumot, majd meghívjuk egy ciklusban a Draw eljárást a megfelelő paraméterekkel a kirajzolás elvégzéséhez. A ciklus mindaddig fut, amíg a Képernyő tulajdonságok ablaka látható. Mivel a Draw-ot folyamatosan kell hívni, így egy Sleep eljárás hívásával késleltetjük a programunk futását, különben a Draw túl gyorsan lenne egymás után meghívva. Amikor a képernyővédőnk "éles" helyzetben fut, akkor egy TTimer gondoskodik az időzítésről, ahogyan ezt láthattuk a múlt heti cikkben.
procedure Demo(Owner: integer);
var
r: TRect;
c: TCanvas;
begin
while not IsWindowVisible(Owner) do begin
Application.ProcessMessages;
end;
GetWindowRect(Owner, r);
c:=TCanvas.Create;
c.Handle:=GetDC(Owner);
while IsWindowVisible(Owner) do begin
Sleep(10);
Application.ProcessMessages;
Draw(c, r.Right-r.Left+1, r.Bottom-r.Top+1);
end;
c.Free;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2000 évkönyv 526. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|