home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 January / Chip_1999-01_cd.bin / zkuste / delphi / D1 / MENUBTN.ZIP / MENUBTN.PAS
Pascal/Delphi Source File  |  1995-12-14  |  5KB  |  132 lines

  1. (**********************************************************************)
  2. (* TmenuButton                                                        *)
  3. (* Ver 1.0                                                            *)
  4. (* Copyright (c) 1995 Peter van Lonkhuyzen                            *)
  5. (* This source may be freely distributed/used without any restrictions*)
  6. (* whatsoever.                                                        *)
  7. (**********************************************************************)
  8. (* Background to this component                                       *)
  9. (* Having moved to Delphi from BP7.0 I found that using Tpanel with   *)
  10. (* Tspeedbuttons it was a poor substitute for the toolbar unit supplied*)
  11. (* with OWL (modified for menu synchronisation by myself) So I came up*)
  12. (* this little unit to handle the synchronisation.                    *)
  13. (**********************************************************************)
  14. (* There are 3 new properties defined                                 *)
  15. (* Menuitem : This is the menuitem you wish to Synchronise with       *)
  16. (* Syncdown : This allows you to syncronise the permanent down state  *)
  17. (*            with the checked property on the menuitem (NB Group may *)
  18. (*            not be 0)                                               *)
  19. (* SyncEnabled : Speaks for itself                                    *)
  20. (**********************************************************************)
  21. (* Usage                                                              *)
  22. (* 1. Set the menuitem you wish to sync with, with no menuitem set it *)
  23. (*    is just a normal speedbutton.                                   *)
  24. (* 2. Set the Sync options and away you go                            *)
  25. (**********************************************************************)
  26. (* Things to keep in mind                                             *)
  27. (* The button automatically clicks the menuitem so don't assign a     *)
  28. (* onclick event unless you want to perform additional handling that  *)
  29. (* gets used only when the button is pressed and not the menu.        *)
  30. (* Make all programatic state changes to the button or the menu won't *)
  31. (* stay in synch. (If you have the VCL source you can modify the menus*)
  32. (* unit to export a onchanged event (don't use the private one already*)
  33. (* their as that gets used by TMainmenu) to notify you of changes made*)
  34. (* programatically to the menu to stay synchronised.                  *)
  35. (**********************************************************************)
  36. (* Any feedback or suggestions can be made directly to me at          *)
  37. (* peterv@inet.co.za                                                  *)
  38. (* unfortunately this internet address will change in Feb 1996        *)
  39. (* or by post To                                                      *)
  40. (*                                                                    *)
  41. (* Peter van Lonkhuyzen                                               *)
  42. (* PO Box 1041                                                        *)
  43. (* Randpark Ridge                                                     *)
  44. (* 2156                                                               *)
  45. (* Rep of South Africa                                                *)
  46. (**********************************************************************)
  47.  
  48. unit Menubtn;
  49.  
  50. interface
  51.  
  52. uses
  53.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  54.   Forms, Dialogs, Buttons, menus;
  55.  
  56. type
  57.   TMenuButton = class(TSpeedButton)
  58.   private
  59.     FMenuItem : TMenuItem;
  60.     FSyncDown : Boolean;
  61.     FSyncEnabled : Boolean;
  62.     Function GetEnabled : Boolean;
  63.     Procedure SetEnabled(AEnabled : Boolean);
  64.     Function GetDown : Boolean;
  65.     Procedure SetDown(ADown : Boolean);
  66.   protected
  67.     { Protected declarations }
  68.   public
  69.     { Public declarations }
  70.     procedure click; override;
  71.   published
  72.     { Published declarations }
  73.     Property Down : Boolean Read GetDown Write SetDown;
  74.     Property Enabled : Boolean Read GetEnabled Write SetEnabled;
  75.     property MenuItem : TmenuItem read Fmenuitem Write FmenuItem;
  76.     property SyncDown : Boolean read FSyncDown Write FSyncDown;
  77.     property SyncEnabled : Boolean read FSyncEnabled Write FSyncEnabled;
  78.   end;
  79.  
  80. procedure Register;
  81.  
  82. implementation
  83.  
  84.  
  85. Function TMenuButton.GetDown : Boolean;
  86. Begin
  87.   GetDown := inherited Down;
  88. End;
  89.  
  90. Procedure TMenuButton.SetDown(ADown : Boolean);
  91. Begin
  92.   If ADown <> inherited Down Then
  93.   Begin
  94.     inherited Down:=ADown;
  95.     if FSyncDown and (fmenuitem<>nil) then
  96.       FMenuitem.Checked:=inherited Down;
  97.   End;
  98. End;
  99.  
  100. Function TMenuButton.GetEnabled : Boolean;
  101. Begin
  102.   GetEnabled := inherited Enabled;
  103. End;
  104.  
  105. Procedure TMenuButton.SetEnabled(AEnabled : Boolean);
  106. Begin
  107.   If AEnabled <> inherited Enabled Then
  108.   Begin
  109.     inherited Enabled:=AEnabled;
  110.     if FSyncEnabled and (fmenuitem<>nil) then
  111.       FMenuitem.Enabled:=inherited Enabled;
  112.   End;
  113. End;
  114.  
  115. procedure TMenubutton.click;
  116. begin
  117.   inherited click;
  118.   if fmenuitem<>nil then
  119.   begin
  120.     fmenuitem.click;
  121.     if FSyncDown then
  122.       FMenuitem.Checked:=inherited Down;
  123.   end;
  124. end;
  125.  
  126. procedure Register;
  127. begin
  128.   RegisterComponents('Samples', [TMenuButton]);
  129. end;
  130.  
  131. end.
  132.