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

Delphi控件源码

开发平台:

Delphi

  1. {*****************************************************}
  2. {                                                     }
  3. {     Varian Component Workshop                       }
  4. {                                                     }
  5. {     Varian Software NL (c) 1996-2000                }
  6. {     All Rights Reserved                             }
  7. {                                                     }
  8. {*****************************************************}
  9. unit VrImageLed;
  10. {$I VRLIB.INC}
  11. interface
  12. uses
  13.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14.   VrConst, VrClasses, VrControls, VrSysUtils, VrThreads;
  15. type
  16.   TVrImageType = (itSound, itCD, itPlug, itMike, itPlayMedia, itSpeaker,
  17.     itNote, itPlayBack, itFrequency, itRecord, itRewind, itReplay);
  18.   TVrImageLed = class(TVrGraphicImageControl)
  19.   private
  20.     FActive: Boolean;
  21.     FImageType: TVrImageType;
  22.     FPalette: TVrPalette;
  23.     FBlink: Boolean;
  24.     FInverted: Boolean;
  25.     FThreaded: Boolean;
  26.     Bitmap: TBitmap;
  27.     FTimer: TVrTimer;
  28.     FOnChange: TNotifyEvent;
  29.     function GetTimeInterval: Integer;
  30.     procedure SetImageType(Value: TVrImageType);
  31.     procedure SetActive(Value: Boolean);
  32.     procedure SetTimeInterval(Value: Integer);
  33.     procedure SetBlink(Value: Boolean);
  34.     procedure SetInverted(Value: Boolean);
  35.     procedure SetPalette(Value: TVrPalette);
  36.     procedure SetThreaded(Value: Boolean);
  37.     procedure PaletteModified(Sender: TObject);
  38.     procedure OnTimerEvent(Sender: TObject);
  39.   protected
  40.     procedure LoadBitmaps;
  41.     procedure DestroyBitmaps;
  42.     procedure Paint; override;
  43.     procedure Change; dynamic;
  44.   public
  45.     constructor Create(AOwner: TComponent); override;
  46.     destructor Destroy; override;
  47.   published
  48.     property Threaded: Boolean read FThreaded write SetThreaded default True;
  49.     property Blink: Boolean read FBlink write SetBlink default false;
  50.     property Active: Boolean read FActive write SetActive default false;
  51.     property ImageType: TVrImageType read FImageType write SetImageType default itSound;
  52.     property Palette: TVrPalette read FPalette write SetPalette;
  53.     property TimeInterval: Integer read GetTimeInterval write SetTimeInterval default 1000;
  54.     property Inverted: Boolean read FInverted write SetInverted default false;
  55.     property Transparent default false;
  56.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  57.     property Align;
  58. {$IFDEF VER110}
  59.     property Anchors;
  60.     property Constraints;
  61. {$ENDIF}
  62.     property Color default clBlack;
  63.     property DragCursor;
  64. {$IFDEF VER110}
  65.     property DragKind;
  66. {$ENDIF}
  67.     property DragMode;
  68.     property Hint;
  69.     property ParentColor default false;
  70.     property ParentShowHint;
  71.     property PopupMenu;
  72.     property ShowHint;
  73.     property Visible;
  74.     property OnClick;
  75. {$IFDEF VER130}
  76.     property OnContextPopup;
  77. {$ENDIF}    
  78.     property OnDblClick;
  79.     property OnDragDrop;
  80.     property OnDragOver;
  81. {$IFDEF VER110}
  82.     property OnEndDock;
  83. {$ENDIF}
  84.     property OnEndDrag;
  85.     property OnMouseDown;
  86.     property OnMouseMove;
  87.     property OnMouseUp;
  88. {$IFDEF VER110}
  89.     property OnStartDock;
  90. {$ENDIF}
  91.     property OnStartDrag;
  92.   end;
  93. implementation
  94. {$R VRIMAGELED.D32}
  95. const
  96.   ImageTypeName: array[TVrImageType] of PChar = ('SOUND', 'CD', 'PLUG',
  97.     'MIKE', 'PLAYMEDIA', 'SPEAKER', 'NOTE', 'PLAYBACK', 'FREQUENCY',
  98.     'RECORD', 'REWIND', 'REPLAY');
  99. { TVrImageLed }
  100. constructor TVrImageLed.Create(AOwner: TComponent);
  101. begin
  102.   inherited Create(AOwner);
  103.   ControlStyle := ControlStyle + [csReplicatable, csOpaque] -
  104.     [csSetCaption, csDoubleClicks];
  105.   Width := 40;
  106.   Height := 40;
  107.   Color := clBlack;
  108.   ParentColor := false;
  109.   FActive := false;
  110.   FBlink := false;
  111.   FImageType := itSound;
  112.   FInverted := false;
  113.   FPalette := TVrPalette.Create;
  114.   FPalette.OnChange := PaletteModified;
  115.   Bitmap := TBitmap.Create;
  116.   LoadBitmaps;
  117.   FThreaded := True;
  118.   FTimer := TVrTimer.Create(Self);
  119.   FTimer.Enabled := false;
  120.   FTimer.Interval := 1000;
  121.   FTimer.OnTimer := OnTimerEvent;
  122. end;
  123. destructor TVrImageLed.Destroy;
  124. begin
  125.   FTimer.Free;
  126.   FPalette.Free;
  127.   DestroyBitmaps;
  128.   inherited Destroy;
  129. end;
  130. procedure TVrImageLed.LoadBitmaps;
  131. var
  132.   ResName: array[0..40] of Char;
  133. begin
  134.   Bitmap.Handle := LoadBitmap(HInstance,
  135.     StrFmt(ResName, 'IT_%s', [ImageTypeName[FImageType]]));
  136.   FPalette.ToBMP(Bitmap, ResColorLow, ResColorHigh);
  137. end;
  138. procedure TVrImageLed.DestroyBitmaps;
  139. begin
  140.   Bitmap.Free;
  141. end;
  142. procedure TVrImageLed.SetImageType(Value: TVrImageType);
  143. begin
  144.   if FImageType <> Value then
  145.   begin
  146.     FImageType := Value;
  147.     LoadBitmaps;
  148.     UpdateControlCanvas;
  149.   end;
  150. end;
  151. procedure TVrImageLed.Change;
  152. begin
  153.   if Assigned(FOnChange) then
  154.     FOnChange(Self);
  155. end;
  156. procedure TVrImageLed.SetActive(Value: Boolean);
  157. begin
  158.   if (FBlink and Designing) then
  159.     Value := false;
  160.   if FActive <> Value then
  161.   begin
  162.     FActive := Value;
  163.     UpdateControlCanvas;
  164.     Change;
  165.   end;
  166. end;
  167. procedure TVrImageLed.PaletteModified(Sender: TObject);
  168. begin
  169.   LoadBitmaps;
  170.   UpdateControlCanvas;
  171. end;
  172. procedure TVrImageLed.SetTimeInterval(Value: Integer);
  173. begin
  174.   FTimer.Interval := Value;
  175. end;
  176. procedure TVrImageLed.SetBlink(Value: Boolean);
  177. begin
  178.   if FBlink <> Value then
  179.   begin
  180.     FBlink := Value;
  181.     if FBlink then Active := false;
  182.     if not (csDesigning in ComponentState) then
  183.       FTimer.Enabled := Value;
  184.   end;
  185. end;
  186. procedure TVrImageLed.SetInverted(Value: Boolean);
  187. begin
  188.   if FInverted <> Value then
  189.   begin
  190.     FInverted := Value;
  191.     UpdateControlCanvas;
  192.   end;
  193. end;
  194. procedure TVrImageLed.SetThreaded(Value: Boolean);
  195. begin
  196.   if FThreaded <> Value then
  197.   begin
  198.     FThreaded := Value;
  199.     if Value then FTimer.TimerType := ttThread
  200.     else FTimer.TimerType := ttSystem;
  201.   end;
  202. end;
  203. function TVrImageLed.GetTimeInterval: Integer;
  204. begin
  205.   Result := FTimer.Interval;
  206. end;
  207. procedure TVrImageLed.SetPalette(Value: TVrPalette);
  208. begin
  209.   FPalette.Assign(Value);
  210. end;
  211. procedure TVrImageLed.Paint;
  212. var
  213.   ImageWidth, Offset: Integer;
  214.   X, Y: Integer;
  215.   R: TRect;
  216. begin
  217.   ClearBitmapCanvas;
  218.   ImageWidth := Bitmap.Width div 2;
  219.   Offset := ImageWidth * ord(FActive);
  220.   X := (ClientWidth - ImageWidth) div 2;
  221.   Y := (ClientHeight - Bitmap.Height) div 2;
  222.   if FInverted then
  223.   begin
  224.     R := ClientRect;
  225.     BitmapCanvas.Brush.Color := FPalette.Colors[ord(FActive)];
  226.     BitmapCanvas.FillRect(R);
  227.     BitBlt(BitmapCanvas.Handle, X, Y, ImageWidth, Bitmap.Height,
  228.       Bitmap.Canvas.Handle, Offset, 0, SRCINVERT);
  229.   end
  230.  else
  231.   with BitmapCanvas do
  232.   begin
  233.     Brush.Style := bsClear;
  234.     BrushCopy(Bounds(X, Y, ImageWidth, Bitmap.Height), Bitmap,
  235.        Bounds(Offset, 0, ImageWidth, Bitmap.Height), clBlack);
  236.   end;
  237.   inherited Paint;
  238. end;
  239. procedure TVrImageLed.OnTimerEvent(Sender: TObject);
  240. begin
  241.   Active := not Active;
  242. end;
  243. end.