HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Előugró ToolBar


Példaprogram letöltése

21452 bájt

Ha a CorelDraw, PhotoPaint vagy akár a PhotoShop programokkal dolgozunk, akkor ezek eszköztárán találhatunk olyan gombokat, amelyek önmagukban is használhatók, de ha a jobb alsó sarokban található kis nyílra kattintunk, vagy hosszabb ideig tartjuk lenyomva, akkor megjelenik egy ToolBar, amin további gombok találhatók. Egy kis trükkel mi is készíthetünk ilyen gombokat.
A mellékelt példaprogram megnyitása előtt a PopupToolbar.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Cikkünk első részében a ToolBar-t készítjük el. A Buttons property-n keresztül adhatjuk meg a ToolBar-on megjelenő gombokat. A ButtonWidth és ButtonHeight property-k a gombok szélességét és magasságát határozzák meg. A FlatButtons property a gombok kinézetét befolyásolja, hatása ugyanaz, mint a TSpeedButton-nál. Később látni fogjuk, hogy ez nem véletlen. Az Orientation property határozza meg a gombok elrendezését. Ha az értéke poHorizontal, akkor egymás mellett, ha poVertical akkor egymás alatt jelennek meg.

A property-k ismertetése után rátérhetünk a komponens megvalósítására. A komponenst a TComponent osztályból származtatjuk. A megjelenítendő gombokat tartalmazó Buttons property a TOwnedCollection osztályból származik. Ennek köszönhetően tetszőleges számú gombot felvehetünk, persze a használhatóságot figyelembe véve, hiszen nem biztos, hogy sok gomb elhelyezése megkönnyíti a felhasználó életét, valamint a ToolBar ki is lóghat a képernyőből. Maga a ToolBar egy Form lesz, amin futásidőben hozzuk létre a gombokat. A megjelenítést a Popup metódus végzi el. Ennek két paramétere van: a ToolBar X és Y koordinátája.
procedure TPopupToolbar.Popup;
var i, bx: integer;
    sb: TSpeedButton;
begin
Ellenőrizzük, hogy van-e létrehozandó gomb, mert ha nincs, akkor nem is érdemes megjeleníteni a ToolBart.
  if FButtons.Count=0 then Exit;
Beállítjuk a Form koordinátáit és méreteit. A méretet kezdetben a keret szélességére állítjuk, viszont amikor a gombokat létrehozzuk a Form szélessége és magassága ennek megfelelően fog változni, méghozzá automatikusan, mivel az AutoSize property-t true-ra állítottuk.
  FForm.Left:=X;
  FForm.Top:=Y;
  FForm.Height:=6;
  FForm.Width:=6;
  FForm.ShowHint:=FShowHint;
Ha előzőleg már legalább egyszer megnyitottuk a Form-ot, akkor azon biztos, hogy vannak létrehozva gombok. Mivel azt semmi sem garantálja, hogy a gombok nem változtak az utolsó megjelenítés előtt, ezért ezeket törölni kell. A Form ControlCount property-je megadja, hogy hány komponens található a Form-on. Amíg ez nagyobb, mint 0, addig az elsőt mindig töröljük. Ha töröltük az elsőt, akkor a másodikból lesz az első, és így tovább, egészen addig, amíg el nem fogynak.
  while FForm.ControlCount>0 do begin
    FForm.Controls[0].Free;
  end;
Mielőtt létrehoznánk a gombokat, megjelenítjük a Form-ot. Ez azért jó, mert így a gombok létrehozásával egy időben egy animációt fogunk látni, amint a Form automatikusan változtatja a méretét, hogy minden gomb elférjen rajta.
  FForm.Show;
Egy ciklusban létrehozzuk a TSpeedButton típusú gombokat.
  i:=0;  
  bx:=1;
  while i<FButtons.Count do begin
    sb:=TSpeedButton.Create(NIL);
Az Orientation property értékétől függően kiszámoljuk az új gomb koordinátáit.
    if FOrientation=poHorizontal then begin
      sb.Left:=bx;
      sb.Top:=0;
      FForm.ClientWidth:=(i+1)*FButtonWidth+2;
    end else begin
      sb.Left:=0;
      sb.Top:=bx;
      FForm.ClientHeight:=(i+1)*FButtonHeight+2;
    end;
A Buttons property-ből kiolvassuk a megfelelő sorszámú gomb adatait, és átadjuk azokat az újonnan létrehozott SpeedButton-nak.
    sb.Glyph.Assign(FButtons[i].Glyph);
    sb.NumGlyphs:=FButtons[i].NumGlyphs;
    sb.Flat:=FlatButtons;
    sb.Parent:=FForm;
    sb.Width:=FButtonWidth;
    sb.Height:=FButtonheight;
    sb.Tag:=FButtons[i].Tag;
    sb.Enabled:=FButtons[i].Enabled;
    sb.Hint:=FButtons[i].Hint;
    sb.ShowHint:=FButtons[i].FShowHint;
    sb.ParentShowHint:=FButtons[i].ParentShowHint;
    sb.OnClick:=FButtons[i].FOnClick;
Frissítjük a Form-ot, majd várakozunk egy kicsit, hogy ne legyen nagyon gyors az animáció.
    FForm.Refresh;
    Sleep(10);
    inc(bx, FButtonWidth);
    inc(i);
  end;
Végül generálunk egy OnPopup eseményt.
  if Assigned(FOnPopup) then FOnPopup(self);
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3333WindowsNet Shell parancsok1. rész
3367WindowsNet Shell parancsok2. rész
3396WindowsNet Shell parancsok3. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 250. 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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |