home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2003 January
/
Chip_2003-01_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d23456
/
COOLTRAY.ZIP
/
demos
/
TrayDraw
/
CtDraw.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-11-10
|
6KB
|
249 lines
unit CtDraw;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ExtDlgs, CoolTrayIcon;
type
TDrawForm = class(TForm)
PaintBox1: TPaintBox;
Button2: TButton;
CoolTrayIcon1: TCoolTrayIcon;
Button3: TButton;
Button4: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Shape1: TShape;
CheckBox1: TCheckBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
StartX, StartY: Integer;
CurrentX, CurrentY: Integer;
Drawing: Boolean;
DrawBitmap: TBitmap;
procedure UpdateIcon;
procedure CopyToBitmap(const Bmp: TBitmap);
procedure SetSolidPen;
procedure SetFeatherPen;
procedure Clear;
end;
var
DrawForm: TDrawForm;
implementation
{$R *.DFM}
procedure TDrawForm.FormCreate(Sender: TObject);
begin
DrawBitmap := TBitmap.Create;
DrawBitmap.Width := 16;
DrawBitmap.Height := 16;
// Clear;
end;
procedure TDrawForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DrawBitmap.Free;
end;
procedure TDrawForm.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
StartX := X;
StartY := Y;
Drawing := True;
end;
procedure TDrawForm.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SetSolidPen;
PaintBox1.Canvas.MoveTo(StartX, StartY);
PaintBox1.Canvas.LineTo(X, Y);
CurrentX := 0;
CurrentY := 0;
Drawing := False;
CopyToBitmap(DrawBitmap);
UpdateIcon;
end;
procedure TDrawForm.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if Drawing then
with PaintBox1.Canvas do
begin
// Erase old line
if (CurrentX <> 0) and (CurrentY <> 0) then
begin
SetFeatherPen;
MoveTo(StartX, StartY);
LineTo(CurrentX, CurrentY);
end;
// Draw new line
SetFeatherPen;
MoveTo(StartX, StartY);
LineTo(X, Y);
CurrentX := X;
CurrentY := Y;
end;
end;
procedure TDrawForm.Clear;
begin
PaintBox1.Canvas.Brush.Color := clWhite;
PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.Width, PaintBox1.Height));
if not DrawBitmap.Empty then
begin
CopyToBitmap(DrawBitmap);
UpdateIcon;
end;
end;
procedure TDrawForm.SetSolidPen;
begin
with PaintBox1.Canvas do
begin
Pen.Mode := pmCopy;
Pen.Style := psSolid;
Pen.Width := 8;
Pen.Color := clBlack;
end;
end;
procedure TDrawForm.SetFeatherPen;
begin
with PaintBox1.Canvas do
begin
Pen.Mode := pmNotXor;
Pen.Style := psDot;
Pen.Width := 1;
Pen.Color := clBlack;
end;
end;
procedure TDrawForm.CopyToBitmap(const Bmp: TBitmap);
var
DrawCanvas: TCanvas;
begin
DrawCanvas := TCanvas.Create;
try
DrawCanvas.Handle := PaintBox1.Canvas.Handle;
Bmp.Width := PaintBox1.Width;
Bmp.Height := PaintBox1.Height;
Bmp.Canvas.CopyRect(PaintBox1.ClientRect, DrawCanvas, PaintBox1.ClientRect);
// Resize to 16x16
Bmp.Canvas.StretchDraw(Rect(0, 0, 16, 16), Bmp);
finally
DrawCanvas.Free;
end;
end;
procedure TDrawForm.UpdateIcon;
var
Ico: TIcon;
MaskColor: TColor;
begin
Ico := TIcon.Create;
try
if CheckBox1.Checked then
// Find transparent color (bottom left pixel)
MaskColor := DrawBitmap.Canvas.Pixels[0, DrawBitmap.Height-1]
else
// Not transparent
MaskColor := clNone;
if CoolTrayIcon1.BitmapToIcon(DrawBitmap, Ico, MaskColor) then
begin
// OK, let's assign the icon
CoolTrayIcon1.Icon.Assign(Ico);
CoolTrayIcon1.Refresh;
end;
finally
Ico.Free;
end;
end;
procedure TDrawForm.Button1Click(Sender: TObject);
begin
MessageDlg('This is just a silly demo of how CoolTrayIcon can render ' +
'a tray icon from a bitmap.' + #13#13 +
'Use the mouse to draw some lines or load a bitmap. ' +
'Watch how the tray icon changes.',
mtInformation, [mbOK], 0);
end;
procedure TDrawForm.Button2Click(Sender: TObject);
begin
Clear;
end;
procedure TDrawForm.Button3Click(Sender: TObject);
var
Bmp: TBitmap;
begin
if OpenPictureDialog1.Execute then
begin
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile(OpenPictureDialog1.Filename);
PaintBox1.Canvas.StretchDraw(PaintBox1.ClientRect, Bmp);
CopyToBitmap(DrawBitmap);
UpdateIcon;
finally
Bmp.Free;
end;
end;
end;
procedure TDrawForm.Button4Click(Sender: TObject);
begin
Close;
end;
procedure TDrawForm.PaintBox1Paint(Sender: TObject);
begin
with PaintBox1 do
Canvas.CopyRect(ClientRect, DrawBitmap.Canvas, ClientRect);
end;
procedure TDrawForm.CheckBox1Click(Sender: TObject);
begin
UpdateIcon;
end;
end.