Рисование линий, Как в Paint |
Previous Top Next |
Code: |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ToolWin, ComCtrls, ExtCtrls;
type TForm1 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } StartX: integer; StartY: integer; EndX: integer; EndY: integer; isMousePressed: boolean; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin isMousePressed:=false; Image1.Picture.Bitmap:=TBitmap.create(); Image1.Picture.Bitmap.Width:=Image1.Width; Image1.Picture.Bitmap.Height:=Image1.Height end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin StartX:=X; StartY:=Y; EndX:=StartX; EndY:=StartY; isMousePressed:=true end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin isMousePressed:=false; Image1.Picture.Bitmap.Canvas.Pen.Mode:=pmNOT; Image1.Picture.Bitmap.Canvas.moveTo(StartX, StartY); Image1.Picture.Bitmap.Canvas.lineTo(EndX, EndY); Image1.Picture.Bitmap.Canvas.Pen.Mode:=pmCopy; EndX:=X; EndY:=Y; Image1.Picture.Bitmap.Canvas.moveTo(StartX, StartY); Image1.Picture.Bitmap.Canvas.lineTo(EndX, EndY) end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if isMousePressed then begin Image1.Picture.Bitmap.Canvas.Pen.Mode:=pmNOT; Image1.Picture.Bitmap.Canvas.moveTo(StartX, StartY); Image1.Picture.Bitmap.Canvas.lineTo(EndX, EndY); EndX:=X; EndY:=Y; Image1.Picture.Bitmap.Canvas.moveTo(StartX, StartY); Image1.Picture.Bitmap.Canvas.lineTo(EndX, EndY); Image1.Picture.Bitmap.Canvas.Pen.Mode:=pmCopy end end;
end. |
Более развернутую демку можно найти в папке {$DELPHI7}/Demos/Doc/Graphex
Автор: Mischka
Взято из http://forum.sources.ru
©Drkb::03825