Recimo da ลพelimo da napravimo malu aplikaciju kao ลกto je ฤasovnik ili hardverski monitor, koji ฤe zauzimati malo mesta na ekranu. Kreiraฤemo malu formu i to takvu da nema naslovne linije, da korisnici ne bi mogli da poveฤavaju/smanjuju veliฤinu forme, ali da ipak mogu da premeลกtaju formu. Na primer, program „Sat“ koji dolazi uz Windows ne poseduje naslovnu liniju, ali forma programa moลพe biti prevuฤena na drugo mesto. Kako ovaj efekat reprodukovati u Delphi aplikacijama?
Postoji nekoliko naฤina da dobijemo ovaj efekat. Osnovna tehnika je da „zavaramo“ Windows da je cela forma (ili neki njen deo) u stvari naslovna linija. Pa tako, kada korisnik klikne miลกem bilo gde na formi i pomeri pokazivaฤ, i forma bi trebalo da promeni poziciju i isprati pokret korisnika.
- Pokrenite Delphi i kreirajte novi projekat. Projekat nazovite „BEZNASLOVA.DPR“.
- Podesite osobine forme na sledeฤi naฤin:
- AutoScroll – False
- BorderStyle – bsSingle
- Name – Forma bez naslova
- Dodajte na formu i dve kontrole label sa sledeฤim osobinama:
- Label1
Left 14
Top 5
Width 100
Height 20
Alignment taCenter
AutoSize False
- Label2
Left 14
Top 30
Width 100
Height 20
Alignment taCenter
AutoSize False
- Label1
- Dodajte na formu i komponentu „PopupMenu“, dvostruko kliknite na postavljenu komponentu i pojaviฤe vam se „Menu Designer“. Na „Pop-up“ meni dodajte samo dve stavke: „&Izlaz“ i „&Ostani na vrhu“
- Unutar obrade dogaฤaja OnClick menija „Izlaz“ dodajte sledeฤi programski kod:
procedure TForm1.IzlazClick(Sender: TObject);
begin
Close;
end;
- Unutar obrade dogaฤaja OnClick menija „Ostani na vrhu“ dodajte sledeฤi kod:
procedure TForm1.Ostaninavrhu1Click(Sender: TObject);
begin
Ostaninavrhu1.Checked := not(Ostaninavrhu1.Checked);
if Ostaninavrhu1.Checked then
FormStyle := fsStayOnTop
else FormStyle := fsNormal;
end;
- Zatvorite „dizajner menija“. Za ovaj projekat potrebna nam je drugaฤija forma u odnosu na standardne koje nudi Delphi. Potrebno je da podesimo stil forme tako da „zaobiฤemo“ metod forme „CreateParams“. U editoru koda deklariลกite metod „CreateParams“ u sekciji deklaracija:
type
TNoCapForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
PopupMenu1: TPopupMenu;
Izlaz: TMenuItem;
Ostaninavrhu: TMenuItem;
procedure Timer1Timer(Sender: TObject);
procedure IzlazClick(Sender: TObject);
procedure Ostaninavrhu(Sender: TObject);
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
- Potom, u sekciju implementation dodajte naredni kod:
implementation
{$R *.DFM}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams (Params);
Params.Style := ws_Popup or ws_ClipChildren or ws_ClipSiblings or
ws_Border;
end;
- Preostalo nam je da podesimo da Windows tretira celu formu kao naslovnu liniju, i to odgovaranjem na sistemsku poruku wmโNCHitTest:
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
procedure WMNCHitTest(var Msg: TMessage); message WM_NCHITTEST;
public
{ Public declarations }
end;
- U sekciju implementacija dodaฤemo kod za upravljanje sistemskom porukom:
procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
if GetAsyncKeyState(VK_LBUTTON) < 0 then
Msg.Result := HTCAPTION
else
Msg.Result := HTCLIENT;
end;
- Na formu ฤemo joลก dodati komponentu „Timer“, iz koje ฤemo iลกฤitavati podatak o trenutnom vremenu.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := TimeToStr(Time);
Label2.Caption := DateToStr(Date);
end;
Selektujte formu i preฤite u „Object Inspector“, na kartici „Events“, kliknite u desno polje dogaฤaja „OnCreate“, te iz liste izaberite „Timer1Timer“. - Iskompajlirajte i istestirajte projekat.
Pratite Krstaricu na www.krstarica.com