VrTrayGauge.pas
上传用户:hbszzs
上传日期:2008-08-20
资源大小:628k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*****************************************************}
  2. {                                                     }
  3. {     Varian Component Workshop                       }
  4. {                                                     }
  5. {     Varian Software NL (c) 1996-2000                }
  6. {     All Rights Reserved                             }
  7. {                                                     }
  8. {*****************************************************}
  9. unit VrTrayGauge;
  10. {$I VRLIB.INC}
  11. interface
  12. uses
  13.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14.   VrClasses, VrSystem, VrSysUtils;
  15. type
  16.   TVrTrayGaugeStyle = (gsSingle, gsDual);
  17.   TVrTrayGauge = class(TVrCustomTrayIcon)
  18.   private
  19.     FMin: Integer;
  20.     FMax: Integer;
  21.     FPosition: Integer;
  22.     FOnChange: TNotifyEvent;
  23.     FPalette: TVrPalette;
  24.     FStyle: TVrTrayGaugeStyle;
  25.     ResName: string;
  26.     ImageList: TImageList;
  27.     Bitmap: TBitMap;
  28.     procedure SetMin(Value: Integer);
  29.     procedure SetMax(Value: Integer);
  30.     procedure SetPosition(Value: Integer);
  31.     procedure SetStyle(Value: TVrTrayGaugeStyle);
  32.     procedure SetPalette(Value: TVrPalette);
  33.     procedure UpdateTrayIcon;
  34.     procedure PaletteModified(Sender: TObject);
  35.   protected
  36.     procedure Loaded; override;
  37.     procedure LoadBitmaps;
  38.     function IconIndex: Integer;
  39.     procedure Change;
  40.   public
  41.     constructor Create(AOwner: TComponent); override;
  42.     destructor Destroy; override;
  43.   published
  44.     property Palette: TVrPalette read FPalette write SetPalette;
  45.     property Max: Integer read FMax write SetMax default 100;
  46.     property Min: Integer read FMin write SetMin default 0;
  47.     property Position: Integer read FPosition write SetPosition default 0;
  48.     property Style: TVrTrayGaugeStyle read FStyle write SetStyle default gsSingle;
  49.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  50.     property Visible;
  51.     property Enabled;
  52.     property Hint;
  53.     property ShowHint;
  54.     property PopupMenu;
  55.     property HideTaskBtn;
  56.     property LeftBtnPopup;
  57.     property OnClick;
  58.     property OnDblClick;
  59.     property OnMouseDown;
  60.     property OnMouseUp;
  61.     property OnMouseMove;
  62.   end;
  63. implementation
  64. {$R VRTRAYGAUGE.D32}
  65. const
  66.   ImageCount = 12;
  67.   MaskColor = $00B8CCB5;
  68. constructor TVrTrayGauge.Create(AOwner: TComponent);
  69. begin
  70.   inherited Create(AOwner);
  71.   FMin := 0;
  72.   FMax := 100;
  73.   FPosition := 0;
  74.   FStyle := gsSingle;
  75.   FPalette := TVrPalette.Create;
  76.   FPalette.OnChange := PaletteModified;
  77.   ImageList := TImageList.Create(nil);
  78.   ImageList.Width := 15;
  79.   ResName := 'ICGAUGE';
  80.   Bitmap := TBitMap.Create;
  81.   LoadBitmaps;
  82. end;
  83. destructor TVrTrayGauge.Destroy;
  84. begin
  85.   Bitmap.Free;
  86.   ImageList.Free;
  87.   FPalette.Free;
  88.   inherited Destroy;
  89. end;
  90. procedure TVrTrayGauge.Loaded;
  91. begin
  92.   inherited Loaded;
  93.   LoadBitmaps;
  94.   UpdateTrayIcon;
  95. end;
  96. function TVrTrayGauge.IconIndex: Integer;
  97. begin
  98.   Result := (ImageCount * (FPosition - FMin)) div (FMax - FMin);
  99. end;
  100. procedure TVrTrayGauge.Change;
  101. begin
  102.   if Assigned(FOnChange) then FOnChange(Self);
  103. end;
  104. procedure TVrTrayGauge.UpdateTrayIcon;
  105. begin
  106.   ImageList.GetIcon(IconIndex, Icon);
  107. end;
  108. procedure TVrTrayGauge.SetMin(Value: Integer);
  109. begin
  110.   if FMin <> Value then
  111.   begin
  112.     FMin := MinIntVal(Value, FMax - 1);
  113.     AdjustRange(FPosition, FMin, FMax);
  114.     UpdateTrayIcon;
  115.   end;
  116. end;
  117. procedure TVrTrayGauge.SetMax(Value: Integer);
  118. begin
  119.   if FMax <> Value then
  120.   begin
  121.     FMax := MaxIntVal(FMin + 1, Value);
  122.     AdjustRange(FPosition, FMin, FMax);
  123.     UpdateTrayIcon;
  124.   end;
  125. end;
  126. procedure TVrTrayGauge.SetPosition(Value: Integer);
  127. begin
  128.   if FPosition <> Value then
  129.   begin
  130.     FPosition := Value;
  131.     AdjustRange(FPosition, FMin, FMax);
  132.     UpdateTrayIcon;
  133.     Change;
  134.   end;
  135. end;
  136. procedure TVrTrayGauge.SetPalette(Value: TVrPalette);
  137. begin
  138.   FPalette.Assign(Value);
  139. end;
  140. procedure TVrTrayGauge.LoadBitmaps;
  141. begin
  142.   Bitmap.Handle := LoadBitmap(hInstance, PChar(ResName));
  143.   FPalette.ToBMP(Bitmap, clGreen, clLime);
  144.   ImageList.Clear;
  145.   ImageList.AddMasked(Bitmap, MaskColor);
  146. end;
  147. procedure TVrTrayGauge.PaletteModified(Sender: TObject);
  148. begin
  149.   LoadBitmaps;
  150.   UpdateTrayIcon;
  151. end;
  152. procedure TVrTrayGauge.SetStyle(Value: TVrTrayGaugeStyle);
  153. begin
  154.   if FStyle <> Value then
  155.   begin
  156.     FStyle := Value;
  157.     if FStyle = gsSingle then ResName := 'ICGAUGE'
  158.       else ResName := 'ICLEVELS';
  159.     LoadBitmaps;
  160.     UpdateTrayIcon;
  161.   end;
  162. end;
  163. end.