按照书上的列子写的代码,编译时出现未定义 DrawingTool: TDrawingTool,奇怪了,不知哪里出错了,代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, Buttons;type
TForm1 = class(TForm)
Panel1: TPanel;
LineSpeedButton: TSpeedButton;
RectangleSpeedButton: TSpeedButton;
RoundSpeedButton: TSpeedButton;
EllipseSpeedButton: TSpeedButton;
StatusBar1: TStatusBar;
ScrollBox1: TScrollBox;
Image: TImage;
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure LineSpeedButtonClick(Sender: TObject);
procedure RectangleSpeedButtonClick(Sender: TObject);
procedure EllipseSpeedButtonClick(Sender: TObject);
procedure RoundSpeedButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
DrawingTool: TDrawingTool; 这里已经定义了怎么会出错,是不是要加载控件,哪里缺了什么//
Origin,MovePt : TPoint;
Drawing: Boolean; CurrentFile: string;
procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
end;var
Form1: TForm1;implementation
uses Clipbrd,Jpeg;
{$R *.dfm}procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
{绘图过程}
begin
with Image.Canvas do
begin
Pen.Mode := AMode;
case DrawingTool of
dtLine:
begin
Image.Canvas.MoveTo(TopLeft.X, TopLeft.Y);
Image.Canvas.LineTo(BottomRight.X, BottomRight.Y);
end;
dtRectangle: Image.Canvas.Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y);
dtEllipse: Image.Canvas.Ellipse(Topleft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y);
dtRoundRect: Image.Canvas.RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y, (TopLeft.X - BottomRight.X) div 2,
(TopLeft.Y - BottomRight.Y) div 2);
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap := nil;
try
Bitmap := TBitmap.Create;
Bitmap.Width := 700;
Bitmap.Height :=400;
Image.Picture.Graphic:= Bitmap;
finally
Bitmap.Free;
end;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Drawing := True;
Image.Canvas.MoveTo(X, Y);
Origin := Point(X, Y);
MovePt := Origin;
StatusBar1.Panels[0].Text := Format('Origin: (%d, %d)', [X, Y]);
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Drawing then
begin
DrawShape(Origin, MovePt, pmNotXor);
MovePt := Point(X, Y);
DrawShape(Origin, MovePt, pmNotXor);
end;
StatusBar1.Panels[1].Text := Format('当前位置: (%d, %d)', [X, Y]);
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Drawing then
begin
DrawShape(Origin, Point(X, Y), pmCopy);
Drawing := False;
end;
end;procedure TForm1.LineSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtLine;
end;procedure TForm1.RectangleSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtRectangle;
end;procedure TForm1.EllipseSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtEllipse;
end;procedure TForm1.RoundSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtRoundRect;
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, Buttons;type
TForm1 = class(TForm)
Panel1: TPanel;
LineSpeedButton: TSpeedButton;
RectangleSpeedButton: TSpeedButton;
RoundSpeedButton: TSpeedButton;
EllipseSpeedButton: TSpeedButton;
StatusBar1: TStatusBar;
ScrollBox1: TScrollBox;
Image: TImage;
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure LineSpeedButtonClick(Sender: TObject);
procedure RectangleSpeedButtonClick(Sender: TObject);
procedure EllipseSpeedButtonClick(Sender: TObject);
procedure RoundSpeedButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
DrawingTool: TDrawingTool; 这里已经定义了怎么会出错,是不是要加载控件,哪里缺了什么//
Origin,MovePt : TPoint;
Drawing: Boolean; CurrentFile: string;
procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
end;var
Form1: TForm1;implementation
uses Clipbrd,Jpeg;
{$R *.dfm}procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
{绘图过程}
begin
with Image.Canvas do
begin
Pen.Mode := AMode;
case DrawingTool of
dtLine:
begin
Image.Canvas.MoveTo(TopLeft.X, TopLeft.Y);
Image.Canvas.LineTo(BottomRight.X, BottomRight.Y);
end;
dtRectangle: Image.Canvas.Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y);
dtEllipse: Image.Canvas.Ellipse(Topleft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y);
dtRoundRect: Image.Canvas.RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X,
BottomRight.Y, (TopLeft.X - BottomRight.X) div 2,
(TopLeft.Y - BottomRight.Y) div 2);
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap := nil;
try
Bitmap := TBitmap.Create;
Bitmap.Width := 700;
Bitmap.Height :=400;
Image.Picture.Graphic:= Bitmap;
finally
Bitmap.Free;
end;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Drawing := True;
Image.Canvas.MoveTo(X, Y);
Origin := Point(X, Y);
MovePt := Origin;
StatusBar1.Panels[0].Text := Format('Origin: (%d, %d)', [X, Y]);
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Drawing then
begin
DrawShape(Origin, MovePt, pmNotXor);
MovePt := Point(X, Y);
DrawShape(Origin, MovePt, pmNotXor);
end;
StatusBar1.Panels[1].Text := Format('当前位置: (%d, %d)', [X, Y]);
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Drawing then
begin
DrawShape(Origin, Point(X, Y), pmCopy);
Drawing := False;
end;
end;procedure TForm1.LineSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtLine;
end;procedure TForm1.RectangleSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtRectangle;
end;procedure TForm1.EllipseSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtEllipse;
end;procedure TForm1.RoundSpeedButtonClick(Sender: TObject);
begin
DrawingTool := dtRoundRect;
end;end.
TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect);