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

Delphi控件源码

开发平台:

C++ Builder

  1. {*******************************************************}
  2. {                                                       }
  3. {       AnimatedMenus/2000                              }
  4. {       T_AM2000_BitmapOptions                          }
  5. {                                                       }
  6. {       Copyright (c) 1997-99 AnimatedMenus.com         }
  7. {       All rights reserved.                            }
  8. {                                                       }
  9. {*******************************************************}
  10. unit am2000bitmap;
  11. interface
  12. uses
  13.   Windows, Classes, Graphics, Menus, Controls,
  14.   am2000options;
  15. type
  16.   // Bitmap menu control options
  17.   T_AM2000_BitmapOptions = class(T_AM2000_ControlOptions)
  18.   private
  19.     FTransparent  : Boolean;
  20.     FNumGlyphs    : Integer;
  21.     FBitmap       : TBitmap;
  22.     FDrawCaption  : Boolean;
  23.     procedure SetBitmap(Value: TBitmap);
  24.     procedure SetNumGlyphs(const Value: Integer);
  25.   public
  26.     constructor Create(AParent: TMenuItem); override;
  27.     destructor Destroy; override;
  28.     procedure Draw(DrawRect: P_AM2000_DrawMenuItemRect); override;
  29.     function GetHeight(ItemHeight: Integer): Integer; override;
  30.     function GetWidth(Canvas: TCanvas): Integer; override;
  31.   published
  32. //    property Transparent  : Boolean
  33. //      read FTransparent write FTransparent default False;
  34.     property NumGlyphs    : Integer
  35.       read FNumGlyphs write SetNumGlyphs default 1;
  36.     property Bitmap       : TBitmap
  37.       read FBitmap write SetBitmap;
  38. //    property DrawCaption  : Boolean
  39. //      read FDrawCaption write FDrawCaption default True;
  40.   end;
  41. implementation
  42. uses
  43.   SysUtils,
  44.   am2000menuitem, am2000utils, am2000const;
  45. { T_AM2000_BitmapOptions }
  46. constructor T_AM2000_BitmapOptions.Create(AParent: TMenuItem);
  47. begin
  48.   inherited;
  49.   FTransparent:= True;
  50.   FDrawCaption:= True;
  51.   FNumGlyphs:= 1;
  52.   FBitmap:= TBitmap.Create;
  53. end;
  54. destructor T_AM2000_BitmapOptions.Destroy;
  55. begin
  56.   FBitmap.Free;
  57.   inherited;
  58. end;
  59. procedure T_AM2000_BitmapOptions.SetBitmap(Value: TBitmap);
  60. begin
  61.   FBitmap.Assign(Value);
  62. end;
  63. procedure T_AM2000_BitmapOptions.Draw(DrawRect: P_AM2000_DrawMenuItemRect);
  64. var
  65.   DX, X: Integer;
  66.   OldPalette: HPalette;
  67. begin
  68.   if (FBitmap = nil)
  69.   or (FBitmap.Empty)
  70.   then Exit;
  71.   with DrawRect^ do begin
  72.     // select bitmap
  73.     DX:= FBitmap.Width div FNumGlyphs;
  74.     X:= 0;
  75.     if (FNumGlyphs > 1) and (isDisabled in State)  then X:= DX
  76.     else
  77.     if (FNumGlyphs > 2) and (isActivated in State) then X:= 2 * DX
  78.     else
  79.     if (FNumGlyphs > 3) and (isSelected in State)  then X:= 3 * DX;
  80.     // draw
  81.     OldPalette:= 0;
  82.     if (FBitmap.Palette <> 0) then begin
  83.       OldPalette:= SelectPalette(Canvas.Handle, FBitmap.Palette, True);
  84.       RealizePalette(Canvas.Handle);
  85.     end;
  86.     BitBlt(Canvas.Handle, mir.LineLeft, mir.Top, mir.LineRight - mir.LineLeft, mir.Height,
  87.       FBitmap.Canvas.Handle, X, 0, Canvas.CopyMode);
  88.     if OldPalette <> 0
  89.     then SelectPalette(Canvas.Handle, OldPalette, True);
  90.   end;
  91. end;
  92. function T_AM2000_BitmapOptions.GetHeight(ItemHeight: Integer): Integer;
  93. begin
  94.   if
  95.     (FBitmap <> nil)
  96.   then
  97.     Result:= FBitmap.Height
  98.   else
  99.     Result:= 0;
  100. end;
  101. function T_AM2000_BitmapOptions.GetWidth(Canvas: TCanvas): Integer;
  102. begin
  103.   if
  104.     (FBitmap <> nil)
  105.   then
  106.     Result:= FBitmap.Width div FNumGlyphs
  107.   else
  108.     Result:= 0;
  109. end;
  110. procedure T_AM2000_BitmapOptions.SetNumGlyphs(const Value: Integer);
  111. begin
  112.   if
  113.     (Value > 0) and (Value < 5)
  114.   then
  115.     FNumGlyphs:= Value
  116.   else
  117.     raise Exception.Create(SValueMustBeBetween1And4);
  118. end;
  119. end.