home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / ChipCD_1.03.iso / zkuste / delphi / kompon / d23456 / COOLTRAY.ZIP / demos / TrayDraw / CtDraw.pas < prev    next >
Pascal/Delphi Source File  |  2001-11-10  |  6KB  |  249 lines

  1. unit CtDraw;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtCtrls, StdCtrls, ExtDlgs, CoolTrayIcon;
  8.  
  9. type
  10.   TDrawForm = class(TForm)
  11.     PaintBox1: TPaintBox;
  12.     Button2: TButton;
  13.     CoolTrayIcon1: TCoolTrayIcon;
  14.     Button3: TButton;
  15.     Button4: TButton;
  16.     OpenPictureDialog1: TOpenPictureDialog;
  17.     Shape1: TShape;
  18.     CheckBox1: TCheckBox;
  19.     Button1: TButton;
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  22.     procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  23.       Shift: TShiftState; X, Y: Integer);
  24.     procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  25.       Shift: TShiftState; X, Y: Integer);
  26.     procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;
  27.       X, Y: Integer);
  28.     procedure Button1Click(Sender: TObject);
  29.     procedure Button2Click(Sender: TObject);
  30.     procedure Button3Click(Sender: TObject);
  31.     procedure Button4Click(Sender: TObject);
  32.     procedure PaintBox1Paint(Sender: TObject);
  33.     procedure CheckBox1Click(Sender: TObject);
  34.   private
  35.     StartX, StartY: Integer;
  36.     CurrentX, CurrentY: Integer;
  37.     Drawing: Boolean;
  38.     DrawBitmap: TBitmap;
  39.     procedure UpdateIcon;
  40.     procedure CopyToBitmap(const Bmp: TBitmap);
  41.     procedure SetSolidPen;
  42.     procedure SetFeatherPen;
  43.     procedure Clear;
  44.   end;
  45.  
  46. var
  47.   DrawForm: TDrawForm;
  48.  
  49. implementation
  50.  
  51. {$R *.DFM}
  52.  
  53. procedure TDrawForm.FormCreate(Sender: TObject);
  54. begin
  55.   DrawBitmap := TBitmap.Create;
  56.   DrawBitmap.Width := 16;
  57.   DrawBitmap.Height := 16;
  58. //  Clear;
  59. end;
  60.  
  61.  
  62. procedure TDrawForm.FormClose(Sender: TObject; var Action: TCloseAction);
  63. begin
  64.   DrawBitmap.Free;
  65. end;
  66.  
  67.  
  68. procedure TDrawForm.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  69.   Shift: TShiftState; X, Y: Integer);
  70. begin
  71.   StartX := X;
  72.   StartY := Y;
  73.   Drawing := True;
  74. end;
  75.  
  76.  
  77. procedure TDrawForm.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  78.   Shift: TShiftState; X, Y: Integer);
  79. begin
  80.   SetSolidPen;
  81.   PaintBox1.Canvas.MoveTo(StartX, StartY);
  82.   PaintBox1.Canvas.LineTo(X, Y);
  83.   CurrentX := 0;
  84.   CurrentY := 0;
  85.   Drawing := False;
  86.   CopyToBitmap(DrawBitmap);
  87.   UpdateIcon;
  88. end;
  89.  
  90.  
  91. procedure TDrawForm.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;
  92.   X, Y: Integer);
  93. begin
  94.   if Drawing then
  95.     with PaintBox1.Canvas do
  96.     begin
  97.       // Erase old line
  98.       if (CurrentX <> 0) and (CurrentY <> 0) then
  99.       begin
  100.         SetFeatherPen;
  101.         MoveTo(StartX, StartY);
  102.         LineTo(CurrentX, CurrentY);
  103.       end;
  104.       // Draw new line
  105.       SetFeatherPen;
  106.       MoveTo(StartX, StartY);
  107.       LineTo(X, Y);
  108.       CurrentX := X;
  109.       CurrentY := Y;
  110.     end;
  111. end;
  112.  
  113.  
  114. procedure TDrawForm.Clear;
  115. begin
  116.   PaintBox1.Canvas.Brush.Color := clWhite;
  117.   PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.Width, PaintBox1.Height));
  118.   if not DrawBitmap.Empty then
  119.   begin
  120.     CopyToBitmap(DrawBitmap);
  121.     UpdateIcon;
  122.   end;
  123. end;
  124.  
  125.  
  126. procedure TDrawForm.SetSolidPen;
  127. begin
  128.   with PaintBox1.Canvas do
  129.   begin
  130.     Pen.Mode := pmCopy;
  131.     Pen.Style := psSolid;
  132.     Pen.Width := 8;
  133.     Pen.Color := clBlack;
  134.   end;
  135. end;
  136.  
  137.  
  138. procedure TDrawForm.SetFeatherPen;
  139. begin
  140.   with PaintBox1.Canvas do
  141.   begin
  142.     Pen.Mode := pmNotXor;
  143.     Pen.Style := psDot;
  144.     Pen.Width := 1;
  145.     Pen.Color := clBlack;
  146.   end;
  147. end;
  148.  
  149.  
  150. procedure TDrawForm.CopyToBitmap(const Bmp: TBitmap);
  151. var
  152.   DrawCanvas: TCanvas;
  153. begin
  154.   DrawCanvas := TCanvas.Create;
  155.   try
  156.     DrawCanvas.Handle := PaintBox1.Canvas.Handle;
  157.     Bmp.Width := PaintBox1.Width;
  158.     Bmp.Height := PaintBox1.Height;
  159.     Bmp.Canvas.CopyRect(PaintBox1.ClientRect, DrawCanvas, PaintBox1.ClientRect);
  160.     // Resize to 16x16
  161.     Bmp.Canvas.StretchDraw(Rect(0, 0, 16, 16), Bmp);
  162.   finally
  163.     DrawCanvas.Free;
  164.   end;
  165. end;
  166.  
  167.  
  168. procedure TDrawForm.UpdateIcon;
  169. var
  170.   Ico: TIcon;
  171.   MaskColor: TColor;
  172. begin
  173.   Ico := TIcon.Create;
  174.   try
  175.     if CheckBox1.Checked then
  176.       // Find transparent color (bottom left pixel)
  177.       MaskColor := DrawBitmap.Canvas.Pixels[0, DrawBitmap.Height-1]
  178.     else
  179.       // Not transparent
  180.       MaskColor := clNone;
  181.  
  182.     if CoolTrayIcon1.BitmapToIcon(DrawBitmap, Ico, MaskColor) then
  183.     begin
  184.       // OK, let's assign the icon
  185.       CoolTrayIcon1.Icon.Assign(Ico);
  186.       CoolTrayIcon1.Refresh;
  187.     end;
  188.   finally
  189.     Ico.Free;
  190.   end;
  191. end;
  192.  
  193.  
  194. procedure TDrawForm.Button1Click(Sender: TObject);
  195. begin
  196.   MessageDlg('This is just a silly demo of how CoolTrayIcon can render ' +
  197.              'a tray icon from a bitmap.' + #13#13 +
  198.              'Use the mouse to draw some lines or load a bitmap. ' +
  199.              'Watch how the tray icon changes.',
  200.              mtInformation, [mbOK], 0);
  201. end;
  202.  
  203.  
  204. procedure TDrawForm.Button2Click(Sender: TObject);
  205. begin
  206.   Clear;
  207. end;
  208.  
  209.  
  210. procedure TDrawForm.Button3Click(Sender: TObject);
  211. var
  212.   Bmp: TBitmap;
  213. begin
  214.   if OpenPictureDialog1.Execute then
  215.   begin
  216.     Bmp := TBitmap.Create;
  217.     try
  218.       Bmp.LoadFromFile(OpenPictureDialog1.Filename);
  219.       PaintBox1.Canvas.StretchDraw(PaintBox1.ClientRect, Bmp);
  220.       CopyToBitmap(DrawBitmap);
  221.       UpdateIcon;
  222.     finally
  223.       Bmp.Free;
  224.     end;
  225.   end;
  226. end;
  227.  
  228.  
  229. procedure TDrawForm.Button4Click(Sender: TObject);
  230. begin
  231.   Close;
  232. end;
  233.  
  234.  
  235. procedure TDrawForm.PaintBox1Paint(Sender: TObject);
  236. begin
  237.   with PaintBox1 do
  238.     Canvas.CopyRect(ClientRect, DrawBitmap.Canvas, ClientRect);
  239. end;
  240.  
  241.  
  242. procedure TDrawForm.CheckBox1Click(Sender: TObject);
  243. begin
  244.   UpdateIcon;
  245. end;
  246.  
  247. end.
  248.  
  249.