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