Delphi – Forma bez naslovne (caption) linije

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.

  1. Pokrenite Delphi i kreirajte novi projekat. Projekat nazovite „BEZNASLOVA.DPR“.
  2. Podesite osobine forme na sledeฤ‡i naฤin:
    • AutoScroll – False
    • BorderStyle – bsSingle
    • Name – Forma bez naslova
  3. 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

  4. 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“
  5. Unutar obrade dogaฤ‘aja OnClick menija „Izlaz“ dodajte sledeฤ‡i programski kod:


    procedure TForm1.IzlazClick(Sender: TObject);
    begin
    Close;
    end;

  6. 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;

  7. 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;

  8. 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;

  9. 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;

  10. 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;

  11. 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“.
  12. Iskompajlirajte i istestirajte projekat.

Pratite Krstaricu na www.krstarica.com