HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

TToolBar megjelenítése egy TSpeedButton sarkára történő kattintáskor


2. rész

Példaprogram letöltése

8189 bájt

A CorelDraw, PhotoPaint vagy PhotoShop programok eszköztárain találhatók olyan gombok, amelyekre kattintva egy ToolBar jelenik meg. Cikkünk első részében a ToolBar-t készítettük el, most elkészítjük magát a gombot, ami az eszköztárt megjeleníti.
A mellékelt példaprogram megnyitása előtt a PopupButton.pas-ban lévő komponenst telepítenie kell a Delphi alá, valamint szükség lesz az előző héten bemutatott PopupToolbar komponensre is.

A komponens lényege az, hogy önálló gombként is használható legyen, de legyen egy property-je, amin keresztül egy PopupToolbar komponenst hozzá tudunk kapcsolni. Ha ezt megtesszük, akkor a gombnak kétféle üzemmódja lesz: egyszer megmarad a régi, tehát mint önálló gomb, másodszor pedig a gomb jobb alsó sarkában megjelenő kis nyílra kattintva megjeleníti a ToolBar-t.

Az új komponenst a TSpeedButton osztályból származtatjuk, és ezt egészítjük ki a szükséges változtatásokkal. Létrehozunk 3 új property-t. Az egyik természetesen egy PopupToolbar nevű property, amin keresztül megadhatjuk, hogy melyik ToolBar-t kell megjeleníteni. Az ArrowSize property a gomb sarkában megjelenő kis nyíl méretét határozza meg. Amikor a gombot lenyomják, és nem engedik fel, akkor egy idő múlva meg kell jeleníteni a ToolBar-t. Az Interval property a várakozás idejét adja meg.

A gomb tehát a következőképpen működik:
1. Ha a jobb alsó fekete nyílon kattintunk, akkor megjelenik a ToolBar;
2. Ha lenyomjuk a gombot, de nem engedjük fel azonnal, akkor egy bizonyos idő múlva meg kell jeleníteni a ToolBar-t;
3. Minden más esetben, ha kattintunk a gombon, akkor a gomb OnClick eseményét kell végrehajtani.

A ToolBar megjelenítését az OpenToolbar eljárás végzi el.
procedure TPopupButton.OpenToolbar;
var px, py:integer;
begin
Első lépésben ellenőrizni kell, hogy van-e a gombhoz kapcsolva PopupToolbar.
  if Assigned(FPopupToolbar) then begin
Megnézzük, hogy a ToolBar függőlegesen, vagy vízszintesen jelenik-e meg, és ennek megfelelően állítjuk be a koordinátákat. Ha vízszintesen jelenik meg, akkor a gomb jobb széléhez, ha függőleges, akkor az alsó széléhez igazítjuk.
    if FPopupToolbar.Orientation=poHorizontal then begin
      px:=ClientOrigin.x+Width;     py:=ClientOrigin.y;
    end else begin
      px:=ClientOrigin.x;    py:=ClientOrigin.y+Height;
    end;
Meghívjuk a PopupToolbar Popup metódusát a kiszámolt koordinátákkal.
    FPopupToolbar.Popup(px, py);
  end;
end;

A MouseDown eljárás akkor hajtódik végre, amikor valamelyik egérgombot lenyomták a komponensen.
procedure TPopupButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
…
Ellenőrizzük, hogy a bal egérgombot nyomták-e le.
  if Button=mbLeft then begin
Kiszámoljuk annak a területnek a koordinátáit, ahol a nyíl van. Ezt az ArrowRect változóban tároljuk.
    with ArrowRect do begin
      Left:=Width-FArrowSize*2-2;
      Top:=Height-FArrowSize*2-3;
      Right:=Width;
      Bottom:=Height;
    end;
Ellenőrizzük, hogy az egér koordinátái a nyíl területén belülre esnek-e. Ha igen, akkor meghívjuk az OpenToolbar eljárást, ami megjeleníti a ToolBar-t. Ha a gomb egy más területén kattintottak, akkor elindítjuk a Timer-t.
    if (x>=ArrowRect.Left) and (x<=ArrowRect.Right) and
       (y>=Arrowrect.Top) and (y<=ArrowRect.Bottom) then
    begin
      Application.ProcessMessages;
      OpenToolbar;
    end else begin;
      FTimer.Enabled:=True;   FMouseDown:=True;
    end;
  end;
end;
A Click metódus akkor hajtódik végre, amikor a bal egérgombbal kattintanak a gombon. Ekkor kikapcsoljuk a Timer-t, mivel az egérgombot felengedték, így ha még eddig nem jelent meg a ToolBar, akkor már nem is fogjuk megjeleníteni. Ha a ToolBar még nem lett megjelenítve, akkor meghívjuk az eredeti Click metódust, vagyis a gomb OnClick eseménye hajtódik végre.
procedure TPopupButton.Click;
var ok:boolean;
begin
  FTimer.Enabled:=False;
  if Assigned(FPopupToolbar) then begin
    ok:=not FPopupToolbar.Visible;
  end else ok:=true;
  if ok then inherited Click;
end;
Amikor a komponenshez kapcsolunk egy PopupToolbar-t, akkor a gomb jobb alsó sarkában megjelenik egy kis fekete nyíl, ha viszont nincs ToolBar kapcsolva a gombhoz, akkor ezt nem kell megjeleníteni. A komponens kirajzolását a Paint eljárás végzi, ezért itt kell a kis nyilat is megrajzoltatnunk.
procedure TPopupButton.Paint;
…
Ellenőrizzük, hogy van-e ToolBar kapcsolva a gombhoz, és ha igen, akkor megrajzoljuk a nyilat az FArrowSize property-ben megadott méretben.
  if Assigned(FPopupToolbar) then begin
    i:=0;  ax:=Width-4;  ay:=height-5-FArrowSize div 2; ah:=1;
    while i<FArrowSize do begin
      if ah>1 then begin
        Canvas.MoveTo(ax, ay);    Canvas.LineTo(ax, ay+ah)
      end else begin
        Canvas.Pixels[ax, ay]:=clBlack;
      end;
      inc(ah, 2);  dec(ax);  dec(ay);   inc(i);
    end;
  end;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


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