我按照书上的例子编了一个简单的绘图程序,可是运行时提示出错:
Project Project1.exe rasied exception clss ElistError with message 'List index out of bound(0)!'Process stopped.Use Step or Run to continue.
再运行提示List index out of bounds(0) 后,可以执行。
这是什么原因呢?
Project Project1.exe rasied exception clss ElistError with message 'List index out of bound(0)!'Process stopped.Use Step or Run to continue.
再运行提示List index out of bounds(0) 后,可以执行。
这是什么原因呢?
解决方案 »
- 用Java作为服务端delphi作为客户端开发交流
- 怎样控制FORM的右上角关闭叉叉,不是关闭而是最小化,试了很多方法都不行,急!!!!!!
- 请教各位,TADOConnection在网络断线后的数据库断线通知
- 本人准备了1000分,解决关于网络传输问题,希望高手们给予解答,谢谢!UP有分啊!!!!!!
- 求助,电子白板
- 字符串中想递换某一指定的子字符串是用什么函数?
- 数据库及报表问题,请大家帮我一下
- FastReport 汉化问题
- delphi 音频使用G729编码和解码后,播放出来的是噪音
- dbgrideh有没有这样一个事件,调整列宽时触发
- 网页服务(如IIS)是怎做的?
- 用TShockwaveFlash控件浏览Flash的背景问题!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, ToolWin, ImgList, Menus, ColorGrd, StdCtrls;type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Panel1: TPanel;
Panel2: TPanel;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
ToolBar2: TToolBar;
ToolBar3: TToolBar;
ToolBar4: TToolBar;
line: TToolButton;
pencil: TToolButton;
eraser: TToolButton;
square: TToolButton;
fsquare: TToolButton;
rsquare: TToolButton;
frsquare: TToolButton;
circle: TToolButton;
fcircle: TToolButton;
ImageList1: TImageList;
ColorGrid1: TColorGrid;
PaintBox1: TPaintBox;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
SaveDialog1: TSaveDialog;
procedure LineClick(Sender: TObject);
procedure ColorGrid1Change(Sender: TObject);
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 FormCreate(Sender: TObject);
procedure displayhint(sender:Tobject);
procedure N1Click(Sender:Tobject);
private
IsDown:boolean;
startP,endP:Tpoint;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure SetButtonValid;
var
i:integer;
begin
for i:=0 to form1.ComponentCount -1 do
begin
if form1.Components[i] is TToolbutton then
(form1.Components [i] as TToolbutton).Down :=false;
end;
end;procedure TForm1.LineClick(Sender: TObject);
begin
if sender is Ttoolbutton then
begin
setbuttonvalid; //引用自定义过程setbuttonvalid
with sender as Ttoolbutton do down:=true;
end;
end;
procedure TForm1.ColorGrid1Change(Sender: TObject);
begin
paintbox1.Canvas .pen.Color :=colorgrid1.ForegroundColor ;
end;
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDown:=true; //将鼠标按下的标志设置为真,表示开始画
if pencil.down then //如果用铅笔画
paintbox1.Canvas .MoveTo(x,y);
if line.Down then //如果画直线
begin
startp.x:=x; //设置开始和结束点坐标
startp.y:=y;
endp.x:=x;
endp.y:=y;
end;
if square.down or rsquare.down or circle.down then //如果是绘制空心矩形
//或是空心圆角矩形,空心椭圆
begin
startp.x:=x; //设置开始和结束点坐标
startp.y:=y;
endp.x:=x;
endp.y:=y;
end; if Fsquare.down or Frsquare.down or Fcircle.down then //如果是绘制
//实心矩形或是实心圆角矩形,实心椭圆
begin
paintbox1.Canvas .brush.Color :=colorgrid1.BackgroundColor ;
//设置填充颜色 startp.x:=x; //设置开始和结束点坐标
startp.y:=y;
endp.x:=x;
endp.y:=y;
end;
end;procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDown:=false;
end;
Y: Integer);
begin
if Isdown then //如鼠标被按下,则进行分析
begin
if pencil.down then //如使用铅笔,直接连线到新的点
paintbox1.Canvas.LineTo(x,y) ;
if line.down then //如是绘制直线
begin
with paintbox1 do
begin //对Paintbox的canvas进行设置,包括
canvas.Pen.color:=clwhite; //画笔颜色、起始坐标点位置
canvas.MoveTo (startp.x,startp.y);
canvas.LineTo (endp.X,endp.Y );
canvas.pen.Color :=colorgrid1.ForegroundColor;
canvas.MoveTo(startp.x,startP.y);
canvas.LineTo (x,y);
endp.x:=x;
endp.y:=y;
end;
end; if eraser.down then //如用橡皮
begin
with paintbox1.Canvas do
begin
brush.Color :=clwhite; //设置橡皮擦除后面板的颜色及
FillRect(rect(x-10,y-10,x+15,y+15)); //擦除的图案区域
end;
end; if square.down then //如选择绘制矩形
begin
with paintbox1.Canvas do
begin
brush.Color :=clwhite;
framerect(rect(startp.x,startp.Y,endp.X,endp.y));//设置画刷
endp.X:=x; //颜色和绘制
endp.Y:=y; //矩形框的区域
brush.Color:=colorgrid1.ForegroundColor;
framerect(rect(startp.x,startp.Y,endp.X,endp.y));
end;
end; if Fsquare.down then //如选择绘制带有颜色填充矩形
begin
with paintbox1.Canvas do
begin
brush.Color :=clwhite;
fillrect(rect(startp.x,startp.Y,endp.X,endp.y));//设置绘制
endp.X:=x; // 矩形框的区域
endp.Y:=y; //和内部填充颜色
brush.Color:=colorgrid1.BackgroundColor;
fillrect(rect(startp.x,startp.Y,endp.X,endp.y));
brush.Color:=colorgrid1.ForegroundColor;
framerect(rect(startp.x,startp.Y,endp.X,endp.y));
end;
end;
if Rsquare.down then //如选择绘制圆角矩形
begin
with paintbox1.Canvas do
begin
brush.Color :=clwhite; //设置圆角矩形区域
pen.color:=clwhite;
roundrect(startp.x,startp.y,endp.x,endp.y,(startp.x-endp.x) div 2,(startp.y-endp.y) div 2);
endp.x:=x;
endp.y:=y;
pen.color:=colorgrid1.ForegroundColor; //设置画笔的颜色
roundrect(startp.x,startp.y,endp.x,endp.y,(startp.x-endp.x) div 2,(startp.y-endp.y) div 2) ; end;
end; if FRsquare.down then //如是用色彩填充圆角矩形
begin
with paintbox1.Canvas do
begin
brush.Color :=clwhite;
pen.color:=clwhite;
roundrect(startp.x,startp.y,endp.x,endp.y,(startp.x-endp.x) div 2,(startp.y-endp.y) div 2);
endp.x:=x; //设置圆角矩形的区域
endp.y:=y; // 和内部填充颜色
pen.color:=colorgrid1.ForegroundColor;
brush.Color:=colorgrid1.BackgroundColor;
roundrect(startp.x,startp.y,endp.x,endp.y,(startp.x-endp.x) div 2,(startp.y-endp.y) div 2);
end;
end; if circle.down then //如选择绘制椭圆
begin
with paintbox1.Canvas do
begin
pen.color:=clwhite;
arc(startp.x,startp.y,endp.x,endp.y,startp.x,startp.y,startp.x,startp.y);
//设置画笔的颜色和绘制椭圆的区域
endp.x:=x;
endp.y:=y;
pen.color:=colorgrid1.ForegroundColor;
arc(startp.x,startp.y,endp.x,endp.y,startp.x,startp.y,startp.x,startp.y);
end;
end; if Fcircle.down then //如选择绘制带有彩色填充的椭圆
begin
with paintbox1.Canvas do
begin
brush.color:=clwhite;
pen.color:=clwhite;
ellipse(startp.x,startp.y,endp.x,endp.y);//设置画笔颜色、
endp.x:=x; //椭圆内部填充颜色、
endp.y:=y; //椭圆形的区域
pen.color:=colorgrid1.ForegroundColor;
brush.Color:=Colorgrid1.BackgroundColor;
ellipse(startp.x,startp.y,endp.x,endp.y);
arc(startp.x,startp.y,endp.x,endp.y,startp.x,startp.y,startp.x,startp.y);
end;
end;
end;end;
procedure TForm1.FormCreate(Sender: TObject);
begin
application.onhint:=displayhint;
end;procedure TForm1.displayhint(sender:Tobject);
begin
statusbar1.panels[0].text:=application.hint;
statusbar1.refresh;
end;procedure TForm1.N1Click(Sender:Tobject);
var
rect: Trect;
filename: string;
begin
if savedialog1.Execute then
rect.left :=0;
rect.top:=0;
rect.right:=paintbox1.width;
rect.bottom:=paintbox1.height;
with Tbitmap.create do
begin
try
width:=rect.right;
height:=rect.bottom;
canvas.Copyrect(rect,paintbox1.canvas,rect) ;
filename:=savedialog1.FileName;
if extractfileext(filename)=''then
Filename:=filename+'.bmp';
saveTofile(filename);
finally
free;
end;
end;
end;end.