HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Egyedi fejléc komponens a Form-okhoz


Példaprogram letöltése

18009 bájt

Ha szeretnénk a programjainkat egy kicsit egyénibbé tenni, akkor néhány trükkel megtehetjük ezt. Ebben a példában egy saját Caption Bar-t készítettünk, ami teljes egészében helyettesíti az eredetit, de ellentétben az eredetivel, nagyon sok tulajdonságát beállíthatjuk, valamint bármilyen komponenst elhelyezhetünk rajta.
A mellékelt példaprogram megnyitása előtt a CaptionBar.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Először nézzük meg, hogy milyen property-k állnak rendelkezésünkre. A ColorLeftActive és ColorRightActive property-k a CaptionBar színeit határozzák meg, amikor az ablak aktív. A két szín között színátmenetet készítünk. A ColorLeftInactive, és ColorRightInactive az inaktív ablak fejlécének színeit adják meg. A színátmenet iránya a GradientOrientation porperty-ben állítható be. A PatternActive, illetve PatternInactive property-kben az aktív, és inaktív fejléc háttérmintázatát állíthatjuk be. Ha megadjuk, akkor a színátmenet nem lesz látható. Az Icon property a CaptionBar-on megjelenítendő ikon. Ha erre kattint a felhasználó, akkor a SystemMenu property-ben megadott PopupMenu megjelenik az ikon alatt. A Caption property az ablak fejlécének szövege. Az Alignment és Layout property-k a Caption igazítását határozzák meg vízszintesen és függőlegesen. Ha a TextShadow property értéke true, akkor a felirat "árnyékolva" jelenik meg. A BorderStyle a CaptionBar keretének stílusát adja meg. A FlatButtons property a fejléc-gombok megjelenítésére van hatással, míg a Buttons property-ben a megjelenítendő gombokat adhatjuk meg.

Ahhoz, hogy a CaptionBar átvegye az eredeti fejléc funkcióit, szükség van néhány trükkre. Először is el kell tüntetni az eredeti fejlécet, amit a komponens Create metódusában végzünk el a SetWindowLong függvény segítségével.
  if NOT (csDesigning in ComponentState) then
  begin
    SetWindowLong((Owner as TForm).Handle, GWL_STYLE, WS_DLGFRAME+WS_SIZEBOX+WS_SYSMENU);
  end;
Az ablak üzeneteit is kezelnünk kell, ezért a Form WindowProc eljárását felül kell írnunk. Az eredetire is szükségünk lesz, ezért azt eltároljuk az FOldWndProc változóban.
  FDestroying:=false;
  FOldWndProc:=(AOwner as TForm).WindowProc;
  FMsgNum:=MessageNum;
  inc(messagenum);
  (Owner as TForm).WindowProc:=NewWndProc;
Az üzeneteket tehát a NewWndProc eljárásban kell feldolgoznunk. Ebben először meghívjuk az eredeti üzenetkezelő eljárást, amit az FOldWndProc változóban tároltunk el. A WM_ACTIVATE üzenetet akkor kapja az ablak, amikor aktiválták, illetve amikor inaktívvá vált. Ekkor újrarajzoljuk a komponenst, majd frissítjük a ráhelyezett komponenseket is. A WM_SIZE üzenet akkor jön létre, amikor az ablakot átméretezték. Ezt azért kell vizsgálnunk, mert a Maximize/Normalize gomb képe attól függ, hogy az ablak teljes képernyős, vagy normál nézetben van-e.
procedure TCaptionBar.NewWndProc(var Msg: TMessage);
var i:integer;
begin
  FOldWndProc(MSG);
  case Msg.Msg of
    WM_ACTIVATE: begin
      Paint;
      for I:=0 to ControlCount -1 do begin
        if Controls[I].Visible then Controls[I].Repaint;
      end;
    end;
    WM_SIZE: begin
      case msg.WParam of
        SIZE_RESTORED:  FButtons[1].Caption:=capt_maximize;
        SIZE_MAXIMIZED: FButtons[1].Caption:=capt_restore;
      end;
      ResetButtons;
    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 394. 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 |