am2000options.pas
上传用户:powellwoo
上传日期:2007-01-07
资源大小:109k
文件大小:15k
源码类别:

Delphi控件源码

开发平台:

C++ Builder

  1. {*******************************************************}
  2. {                                                       }
  3. {       AnimatedMenus/2000                              }
  4. {       Menu options                                    }
  5. {                                                       }
  6. {       Copyright (c) 1997-99 AnimatedMenus.com         }
  7. {       All rights reserved.                            }
  8. {                                                       }
  9. {*******************************************************}
  10. unit am2000options;
  11. {$I am2000.inc}
  12. interface
  13. uses
  14.   Windows, Classes, Graphics, Menus, Controls,
  15.   {$IFDEF Delphi4OrHigher} ImgList, {$ENDIF}
  16.   am2000title;
  17. type
  18.   T_AM2000_Alignment = (taLeftJustify, taRightJustify, taCenter, taRightToLeft);
  19.   // animation effect
  20.   T_AM2000_Animation = (anNone, anVSlide, anHSlide, anSmart, anUnfold, anPopup,
  21.     anRandom, anFadeIn);
  22.   // flags
  23.   T_AM2000_Flag = (mfHiddenAsRegular, mfHiddenIsVisible, mfNoAutoShowHidden, mfNoBitmapRect,
  24.     mfNoChangeHidden, mfNoHighDisabled, mfNoShortDividers, mfShowCheckMark, mfStandardAlign);
  25.   T_AM2000_Flags = set of T_AM2000_Flag;
  26.   // mouse state
  27.   T_AM2000_MouseState = set of (msMouseOver, msLeftButton, msRightButton);
  28.   // item state
  29.   T_AM2000_its = (isChecked, isSelected, isDisabled, isHidden, isDefault,
  30.     isRadio, isSubmenu, isActivated, isHiddenPrev, isHiddenSucc, isSeparator,
  31.     isGraphBack, isNoLeftSunken, isNoRightSunken);
  32.   T_AM2000_ItemState = set of T_AM2000_its;
  33.   // background display
  34.   T_AM2000_BackgroundDisplay = (bdDefault, bdCenter, bdTile, bdStretch, bdExpand);
  35.   T_AM2000_BaseOptions = class;
  36.   // menu margins
  37.   T_AM2000_Margins = class(TPersistent)
  38.   private
  39.     FLeft      : Integer;
  40.     FTop       : Integer;
  41.     FRight     : Integer;
  42.     FBottom    : Integer;
  43.     FSpace     : Integer;
  44.     FBorder    : Integer;
  45.   public
  46.     constructor Create;
  47.     procedure Assign(Source: TPersistent); override;
  48.     function IsDefault: Boolean;
  49.   published
  50.     property Left      : Integer
  51.       read FLeft write FLeft default 23;
  52.     property Top       : Integer
  53.       read FTop write FTop default 0;
  54.     property Right     : Integer
  55.       read FRight write FRight default 23;
  56.     property Bottom    : Integer
  57.       read FBottom write FBottom default 0;
  58.     property Space : Integer
  59.       read FSpace write FSpace default 0;
  60.     property Border : Integer
  61.       read FBorder write FBorder default 1;
  62.   end;
  63.   // T_AM2000_MenuItemRect
  64.   T_AM2000_MenuItemRect = class
  65.   public
  66.     LineLeft, LineRight,
  67.     ItemLeft, ItemWidth,
  68.     ShortcutLeft, ShortcutWidth,
  69.     BitmapLeft, BitmapWidth,
  70.     TriangleLeft, TriangleWidth,
  71.     Top, Height, Border: Integer;
  72.     function LineRect: TRect;
  73.     function ItemRect: TRect;
  74.     function ShortcutRect: TRect;
  75.     function BitmapRect: TRect;
  76.     function TriangleRect: TRect;
  77.     procedure IncreaseOffset;
  78.     procedure DecreaseOffset;
  79.     procedure Clear;
  80.   end;
  81.   
  82.   // T_AM2000_DrawMenuItemRect
  83.   P_AM2000_DrawMenuItemRect = ^T_AM2000_DrawMenuItemRect;
  84.   T_AM2000_DrawMenuItemRect = record
  85.     Canvas: TCanvas;
  86.     Handle: HMenu;
  87.     Index: Integer;
  88.     Item: TMenuItem;
  89.     Options: T_AM2000_BaseOptions;
  90.     State: T_AM2000_ItemState;
  91.     MousePos: TPoint;
  92.     MouseState: T_AM2000_MouseState;
  93.     mir: T_AM2000_MenuItemRect;
  94.     FullRepaint: Boolean;
  95.     Images: TImageList;
  96.   end;
  97.   // menu colors
  98.   T_AM2000_Colors = class(TPersistent)
  99.   private
  100.     FBorder          : TColor;
  101.     FMenu            : TColor;
  102.     FMenuText        : TColor;
  103.     FMenuShadow      : TColor;
  104.     FHighlight       : TColor;
  105.     FHighlightText   : TColor;
  106.     FDisabledText    : TColor;
  107.     FDisabledShadow  : TColor;
  108.     FLine            : TColor;
  109.     FLineShadow      : TColor;
  110.   public
  111.     constructor Create;
  112.     procedure Assign(Source: TPersistent); override;
  113.     function IsDefault: Boolean;
  114.   published
  115.     property Border         : TColor
  116.       read FBorder write FBorder default clNone;
  117.     property Menu           : TColor
  118.       read FMenu write FMenu default clMenu;
  119.     property MenuText       : TColor
  120.       read FMenuText write FMenuText default clMenuText;
  121.     property MenuShadow     : TColor
  122.       read FMenuShadow write FMenuShadow default clBtnShadow;
  123.     property Highlight      : TColor
  124.       read FHighlight write FHighlight default clHighlight;
  125.     property HighlightText  : TColor
  126.       read FHighlightText write FHighlightText default clHighlightText;
  127.     property DisabledText   : TColor
  128.       read FDisabledText write FDisabledText default clBtnShadow;
  129.     property DisabledShadow : TColor
  130.       read FDisabledShadow write FDisabledShadow default clBtnHighlight;
  131.     property Line           : TColor
  132.       read FLine write FLine default clBtnShadow;
  133.     property LineShadow     : TColor
  134.       read FLineShadow write FLineShadow default clBtnHighlight;
  135.   end;
  136.   // menu options
  137.   T_AM2000_MenuOptions = class(TPersistent)
  138.   public
  139.     function IsDefault: Boolean; virtual;
  140.   end;
  141.   T_AM2000_BaseOptions = class(T_AM2000_MenuOptions)
  142.   private
  143.     FItemHeight      : Integer;
  144.     FSeparatorHeight : Integer;
  145.     FTitle           : T_AM2000_Title;
  146.     FBackground      : TBitmap;
  147.     FColors          : T_AM2000_Colors;
  148.     FMargins         : T_AM2000_Margins;
  149.     FCaption         : String;
  150.     FTextAlignment   : T_AM2000_Alignment;
  151.     FFlags           : T_AM2000_Flags;
  152.     FDraggable       : Boolean;
  153.     FBackgroundDisplay : T_AM2000_BackgroundDisplay;
  154.     function IsBackgroundStored: Boolean;
  155.     function IsColorsStored: Boolean;
  156.     procedure SetBackground(Value: TBitmap);
  157.     procedure SetColors(Value: T_AM2000_Colors);
  158.     procedure SetTitle(Value: T_AM2000_Title);
  159.     procedure SetMargins(Value: T_AM2000_Margins);
  160.   public
  161.     constructor Create;
  162.     destructor Destroy; override;
  163.     procedure Assign(Source: TPersistent); override;
  164.     function IsDefault: Boolean; override;
  165.     property Flags           : T_AM2000_Flags
  166.       read FFlags write FFlags default [];
  167.   published
  168.     property Alignment       : T_AM2000_Alignment
  169.       read FTextAlignment write FTextAlignment default taLeftJustify;
  170.     property Caption         : String
  171.       read FCaption write FCaption;
  172.     property Colors          : T_AM2000_Colors
  173.       read FColors write SetColors stored  IsColorsStored;
  174.     property ItemHeight      : Integer
  175.       read FItemHeight write FItemHeight default 19;
  176.     property SeparatorHeight : Integer
  177.       read FSeparatorHeight write FSeparatorHeight default 9;
  178.     property Title           : T_AM2000_Title
  179.       read FTitle write SetTitle;
  180.     property Background      : TBitmap
  181.       read FBackground write SetBackground stored  IsBackgroundStored;
  182.     property Draggable       : Boolean
  183.       read FDraggable write FDraggable default False;
  184.     property BackgroundDisplay : T_AM2000_BackgroundDisplay
  185.       read FBackgroundDisplay write FBackgroundDisplay default bdDefault;
  186.     property Margins         : T_AM2000_Margins
  187.       read FMargins write SetMargins;
  188.   end;
  189.   T_AM2000_Options = class(T_AM2000_BaseOptions)
  190.   private
  191.     FAnimation   : T_AM2000_Animation;
  192.   public
  193.     constructor Create;
  194.     procedure Assign(Source: TPersistent); override;
  195.     function IsDefault: Boolean; override;
  196.   published
  197.     property Flags;
  198.     property Animation   : T_AM2000_Animation
  199.       read FAnimation write FAnimation default anSmart;
  200.   end;
  201.   // Basic Control Options class
  202.   T_AM2000_ControlOptions = class(TPersistent)
  203.   protected
  204.     Parent: TMenuItem;
  205.     procedure Repaint;
  206.   public
  207.     constructor Create(AParent: TMenuItem); virtual;
  208.     // drawing routine
  209.     procedure Draw(DrawRect: P_AM2000_DrawMenuItemRect); virtual;
  210.     // bounds routines
  211.     function GetWidth(Canvas: TCanvas): Integer; virtual;
  212.     function GetHeight(ItemHeight: Integer): Integer; virtual;
  213.     // key management routines
  214.     procedure KeyDown(var Key: Word; Shift: TShiftState); virtual;
  215.     procedure KeyPress(var Key: Char); virtual;
  216.   end;
  217. var
  218.   DrawRect: T_AM2000_DrawMenuItemRect;
  219. implementation
  220. uses
  221.   am2000popupmenu, am2000utils;
  222. { T_AM2000_Margins }
  223. constructor T_AM2000_Margins.Create;
  224. begin
  225.   inherited;
  226.   FLeft:= 23;
  227.   FRight:= 23;
  228.   FBorder:= 1;
  229. end;
  230. procedure T_AM2000_Margins.Assign(Source: TPersistent);
  231. var
  232.   Src: T_AM2000_Margins;
  233. begin
  234.   if Source is T_AM2000_Margins then begin
  235.     Src:= T_AM2000_Margins(Source);
  236.     FLeft:=      Src.FLeft;
  237.     FTop:=       Src.FTop;
  238.     FRight:=     Src.FRight;
  239.     FBottom:=    Src.FBottom;
  240.     FSpace:=     Src.FSpace;
  241.     FBorder:=    Src.FBorder;
  242.   end
  243.   else
  244.     inherited;
  245. end;
  246. { T_AM2000_MenuItemRect }
  247. function T_AM2000_MenuItemRect.LineRect: TRect;
  248. begin
  249.   Result:= Rect(LineLeft, Top, LineRight, Top + Height);
  250. end;
  251. function T_AM2000_MenuItemRect.ItemRect: TRect;
  252. begin
  253.   Result:= Rect(ItemLeft, Top, ItemLeft + ItemWidth, Top + Height);
  254. end;
  255. function T_AM2000_MenuItemRect.ShortcutRect: TRect;
  256. begin
  257.   Result:= Rect(ShortcutLeft, Top, ShortcutLeft + ShortcutWidth, Top + Height);
  258. end;
  259. function T_AM2000_MenuItemRect.BitmapRect: TRect;
  260. begin
  261.   Result:= Rect(BitmapLeft, Top, BitmapLeft + BitmapWidth, Top + Height);
  262. end;
  263. function T_AM2000_MenuItemRect.TriangleRect: TRect;
  264. begin
  265.   Result:= Rect(TriangleLeft, Top, TriangleLeft + TriangleWidth, Top + Height);
  266. end;
  267. procedure T_AM2000_MenuItemRect.IncreaseOffset;
  268. begin
  269.   Inc(LineLeft);
  270.   Inc(LineRight);
  271.   Inc(ItemLeft);
  272.   Inc(ShortcutLeft);
  273.   Inc(BitmapLeft);
  274.   Inc(TriangleLeft);
  275.   Inc(Top);
  276. end;
  277. procedure T_AM2000_MenuItemRect.DecreaseOffset;
  278. begin
  279.   Dec(LineLeft);
  280.   Dec(LineRight);
  281.   Dec(ItemLeft);
  282.   Dec(ShortcutLeft);
  283.   Dec(BitmapLeft);
  284.   Dec(TriangleLeft);
  285.   Dec(Top);
  286. end;
  287. { TColors }
  288. constructor T_AM2000_Colors.Create;
  289. begin
  290.   inherited Create;
  291.   FBorder:=         clBtnShadow;
  292.   FMenu:=           clMenu;
  293.   FMenuText:=       clMenuText;
  294.   FMenuShadow:=     clBtnShadow;
  295.   FHighlight:=      clHighlight;
  296.   FHighlightText:=  clHighlightText;
  297.   FDisabledText:=   clBtnShadow;
  298.   FDisabledShadow:= clBtnHighlight;
  299.   FLine:=           clBtnShadow;
  300.   FLineShadow:=     clBtnHighlight;
  301. end;
  302. function T_AM2000_Colors.IsDefault: Boolean;
  303. begin
  304.   Result:= (FBorder =      clBtnShadow)
  305.     and (FMenu =           clMenu)
  306.     and (FMenuText =       clMenuText)
  307.     and (FMenuShadow =     clBtnShadow)
  308.     and (FHighlight =      clHighlight)
  309.     and (FHighlightText =  clHighlightText)
  310.     and (FDisabledText =   clBtnShadow)
  311.     and (FDisabledShadow = clBtnHighlight)
  312.     and (FLine =           clBtnShadow)
  313.     and (FLineShadow =     clBtnHighlight);
  314. end;
  315. procedure T_AM2000_Colors.Assign(Source: TPersistent);
  316. var
  317.   Src: T_AM2000_Colors;
  318. begin
  319.   if Source is T_AM2000_Colors then begin
  320.     Src:= T_AM2000_Colors(Source);
  321.     Border:=         Src.Border;
  322.     Menu:=           Src.Menu;
  323.     MenuText:=       Src.MenuText;
  324.     Highlight:=      Src.Highlight;
  325.     HighlightText:=  Src.HighlightText;
  326.     DisabledText:=   Src.DisabledText;
  327.     DisabledShadow:= Src.DisabledShadow;
  328.     Line:=           Src.Line;
  329.     LineShadow:=     Src.LineShadow;
  330.   end
  331.   else
  332.     inherited;
  333. end;
  334. function T_AM2000_Margins.IsDefault: Boolean;
  335. begin
  336.   Result:=
  337.     (Left = 23) and
  338.     (Top = 1) and
  339.     (Right = 23) and
  340.     (Bottom = 1) and
  341.     (Space = 0) and
  342.     (Border = 1);
  343. end;
  344. { T_AM2000_MenuItemRect }
  345. procedure T_AM2000_MenuItemRect.Clear;
  346. begin
  347.   LineLeft:= 0;
  348.   LineRight:= 0;
  349.   ItemLeft:= 0;
  350.   ItemWidth:= 0;
  351.   ShortcutLeft:= 0;
  352.   ShortcutWidth:= 0;
  353.   BitmapLeft:= 0;
  354.   BitmapWidth:= 0;
  355.   TriangleLeft:= 0;
  356.   TriangleWidth:= 0;
  357.   Top:= 0;
  358.   Height:= 0;
  359.   Border:= 0;
  360. end;
  361. { T_AM2000_MenuOptions }
  362. function T_AM2000_MenuOptions.IsDefault: Boolean; 
  363. begin
  364.   Result:= True;
  365. end;
  366. { T_AM2000_BaseOptions }
  367. constructor T_AM2000_BaseOptions.Create;
  368. begin
  369.   inherited;
  370.   FItemHeight:= 19;
  371.   FSeparatorHeight:= 9;
  372.   FMargins:= T_AM2000_Margins.Create;
  373. //  FIndent:= 23;
  374.   FTitle:= T_AM2000_Title.Create;
  375.   FColors:= T_AM2000_Colors.Create;
  376.   FBackground:= TBitmap.Create;
  377. end;
  378. destructor T_AM2000_BaseOptions.Destroy;
  379. begin
  380.   FColors.Free;
  381.   FTitle.Free;
  382.   FBackground.Free;
  383.   FMargins.Free;
  384.   inherited;
  385. end;
  386. procedure T_AM2000_BaseOptions.SetBackground(Value: TBitmap);
  387. begin
  388.   FBackground.Assign(Value);
  389. end;
  390. procedure T_AM2000_BaseOptions.SetTitle(Value: T_AM2000_Title);
  391. begin
  392.   FTitle.Assign(Value);
  393. end;
  394. procedure T_AM2000_BaseOptions.SetColors(Value: T_AM2000_Colors);
  395. begin
  396.   FColors.Assign(Value);
  397. end;
  398. procedure T_AM2000_BaseOptions.SetMargins(Value: T_AM2000_Margins);
  399. begin
  400.   FMargins.Assign(Value);
  401. end;
  402. function T_AM2000_BaseOptions.IsBackgroundStored: Boolean;
  403. begin
  404.   Result:= not FBackground.Empty;
  405. end;
  406. function T_AM2000_BaseOptions.IsColorsStored: Boolean;
  407. begin
  408.   Result:= not Colors.IsDefault;
  409. end;
  410. procedure T_AM2000_BaseOptions.Assign(Source: TPersistent);
  411. var
  412.   Src: T_AM2000_BaseOptions;
  413. begin
  414.   if Source is T_AM2000_BaseOptions then begin
  415.     Src:= T_AM2000_BaseOptions(Source);
  416.     FItemHeight:= Src.FItemHeight;
  417.     FSeparatorHeight:= Src.FSeparatorHeight;
  418.     FBackgroundDisplay:= Src.FBackgroundDisplay;
  419.     FTextAlignment:= Src.FTextAlignment;
  420.     FCaption:= Src.FCaption;
  421.     FDraggable:= Src.FDraggable;
  422.     FMargins.Assign(Src.FMargins);
  423.     FTitle.Assign(Src.FTitle);
  424.     FBackground.Assign(Src.FBackground);
  425.     FColors.Assign(Src.FColors);
  426.   end
  427.   else
  428.     inherited;
  429. end;
  430. function T_AM2000_BaseOptions.IsDefault: Boolean;
  431. begin
  432.   Result:=
  433.     inherited IsDefault and
  434.     (Alignment = taLeftJustify) and
  435.     (Caption = '') and
  436.     (Colors.IsDefault) and
  437.     (Draggable = False) and
  438.     (ItemHeight = 19) and
  439.     (SeparatorHeight = 9) and
  440.     (Title.IsDefault) and
  441.     (Background.Empty) and
  442.     (FFlags = []) and
  443.     (FBackgroundDisplay = bdDefault) and 
  444.     (Margins.IsDefault);
  445. end;
  446. { T_AM2000_Options }
  447. constructor T_AM2000_Options.Create;
  448. begin
  449.   inherited;
  450.   FAnimation:=  anSmart;
  451. end;
  452. procedure T_AM2000_Options.Assign(Source: TPersistent);
  453. var
  454.   Src: T_AM2000_Options;
  455. begin
  456.   inherited;
  457.   if Source is T_AM2000_Options then begin
  458.     Src:= T_AM2000_Options(Source);
  459.     FAnimation:=  Src.FAnimation;
  460.     FFlags:= Src.FFlags;
  461.   end;
  462. end;
  463. function T_AM2000_Options.IsDefault: Boolean;
  464. begin
  465.   Result:=
  466.     (inherited IsDefault) and
  467.     (Animation = anSmart);
  468. end;
  469. { T_AM2000_ControlOptions }
  470. constructor T_AM2000_ControlOptions.Create(AParent: TMenuItem);
  471. begin
  472.   inherited Create;
  473.   Parent:= AParent;
  474. end;
  475. procedure T_AM2000_ControlOptions.Draw(DrawRect: P_AM2000_DrawMenuItemRect);
  476. begin
  477. end;
  478. function T_AM2000_ControlOptions.GetHeight(ItemHeight: Integer): Integer;
  479. begin
  480.   Result:= 0;
  481. end;
  482. function T_AM2000_ControlOptions.GetWidth(Canvas: TCanvas): Integer;
  483. begin
  484.   Result:= 0;
  485. end;
  486. procedure T_AM2000_ControlOptions.KeyDown(var Key: Word;
  487.   Shift: TShiftState);
  488. begin
  489. end;
  490. procedure T_AM2000_ControlOptions.KeyPress(var Key: Char);
  491. begin
  492. end;
  493. procedure T_AM2000_ControlOptions.Repaint;
  494. begin
  495.   if AssignedActivePopupMenu2000Form
  496.   then TCustomPopupMenu2000(ActivePopupMenu).Form.Repaint;
  497. end;
  498. initialization
  499.   DrawRect.mir:= T_AM2000_MenuItemRect.Create;
  500. finalization
  501.   DrawRect.mir.Free;
  502. end.