代码很长,我把他贴出来了,麻烦大家帮我看看,谢谢!
procedure Tchatform.Panel3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if canrender then
begin
startpoint.x :=x;
startpoint.y :=y;
endpoint.x :=x;
endpoint.y :=y;
rendering:=true;
panelnum:=panelnum+1;
setlength(panel,panelnum);
panel[panelnum-1].panel :=Tpanel.Create(self);
panel[panelnum-1].panel.transparent:=true;
panel[panelnum-1].panel.parent :=panel3;
// panel[panelnum-1].panel.color:=clwhite;
panel[panelnum-1].panel.Left :=x;
panel[panelnum-1].panel.Top :=y;
panel[panelnum-1].panel.BevelInner :=bvnone;
panel[panelnum-1].panel.BevelOuter :=bvnone;
panel[panelnum-1].image:=Timage.Create(self);
panel[panelnum-1].image.Parent:=panel[panelnum-1].panel ;
panel[panelnum-1].image.Align :=alclient;
panel[panelnum-1].image.OnMouseDown :=imagemousedown;
panel[panelnum-1].image.OnMouseMove :=imagemousemove;
panel[panelnum-1].image.OnMouseUp :=imagemouseup;
up:=false;
paneldown:=true;
end;
end;
procedure Tchatform.drawshape(m1,n1,m2,n2:integer;image:Timage);
begin
if lineclick then
begin
image.Canvas.MoveTo(m1,n1);
image.Canvas.LineTo(m2,n2);
end
else
if circleclick then
begin
image.Canvas.Ellipse(m1,n1,m2,n2);
end
else
if rectangleclick then
begin
image.Canvas.Rectangle(m1,n1,m2,n2);
end;
end;
procedure Tchatform.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if canrender then
begin
rendering:=true;
startpoint.x :=x;
startpoint.y :=y;
panelnum:=panelnum+1;
setlength(panel,panelnum);
panel[panelnum-1].panel :=Tpanel.Create(self);
panel[panelnum-1].panel.Parent:=panel3;
panel[panelnum-1].panel.transparent:=true;
// panel[panelnum-1].panel.color:=clwhite;
panelpos:=panel3.ScreenToClient(panel[panelnum-1].panel.clienttoscreen(startpoint));
startpoint:=panelpos;
endpoint:=panelpos;
panel[panelnum-1].panel.Left :=panelpos.x;
panel[panelnum-1].panel.Top :=panelpos.y;
panel[panelnum-1].panel.BevelInner :=bvnone;
panel[panelnum-1].panel.BevelOuter :=bvnone;
panel[panelnum-1].image:=Timage.Create(self);
panel[panelnum-1].image.Parent:=panel[panelnum-1].panel ;
panel[panelnum-1].image.Align :=alclient;
panel[panelnum-1].image.OnMouseDown :=imagemousedown;
panel[panelnum-1].image.OnMouseMove :=imagemousemove;
panel[panelnum-1].image.OnMouseUp :=imagemouseup;
up:=false;
imagedown:=true;
end;
end;
procedure Tchatform.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
tempp: Tpoint;
movep: Tpoint;
begin
if rendering and (not up) and canrender and (not paneldown) then
begin
tempp.x :=x;
tempp.y :=y;
movep:=panel3.ScreenToClient(panel[panelnum-1].image.clienttoscreen(tempp));
panel[panelnum-1].panel.Width :=movep.x-startpoint.x;
panel[panelnum-1].panel.Height :=movep.y-startpoint.y;
render(movep.x,movep.y,panel[panelnum-1].image);
end;
end;
procedure Tchatform.ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
up:=true;
rendering:=false;
imagedown:=false;
paneldown:=false;
panel[panelnum-1].image.Canvas.Pen.Style :=pssolid;
panel[panelnum-1].image.Canvas.Pen.Mode :=pmcopy;
if canrender and not rendering then
begin
drawshape(startpoint.x,startpoint.y,x,y,panel[panelnum-1].Image);
end;
if slrectangleclick or slcircleclick then
begin
panel[panelnum-1].image.Canvas.Brush.Color := ucolor;
panel[panelnum-1].image.Canvas.FloodFill(x,y,ucolor,fsborder);
panel[panelnum-1].image.Canvas.Brush.Color :=ucolor;
end;
end;
procedure Tchatform.render (m1,n1:integer;image:Timage);
begin
panel[panelnum-1].image.Canvas.Brush.Style :=bsclear;
panel[panelnum-1].image.Canvas.Pen.Mode :=pmnotxor;
panel[panelnum-1].image.Canvas.Pen.Style :=pssolid;
drawshape(startpoint.x,startpoint.y,endpoint.x,endpoint.y,panel[panelnum-1].image );
endpoint.x:=m1;
endpoint.y :=n1;
drawshape(startpoint.x ,startpoint.y,endpoint.x,endpoint.y,panel[panelnum-1].image);
end;
procedure Tchatform.Panel3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
up:=true;
rendering:=false;
paneldown:=false;
imagedown:=false;
panel[panelnum-1].image.Canvas.Pen.Style :=pssolid;
panel[panelnum-1].image.Canvas.Pen.Mode :=pmcopy;
if canrender and (not rendering) then
begin
drawshape(startpoint.x,startpoint.y,x,y,panel[panelnum-1].Image);
showmessage(inttostr(startpoint.x)+' '+inttostr(startpoint.y)+' '+inttostr(x)+' '+inttostr(y));
end;
if slrectangleclick or slcircleclick then
begin
panel[panelnum-1].image.Canvas.Brush.Color := ucolor;
panel[panelnum-1].image.Canvas.FloodFill(x,y,ucolor,fsborder);
panel[panelnum-1].image.Canvas.Brush.Color :=ucolor;
end;
end;
procedure Tchatform.Panel3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if rendering and (not up) and canrender and (not imagedown) then
begin
panel[panelnum-1].panel.Width :=x-startpoint.x;
panel[panelnum-1].panel.Height :=y-startpoint.y;
render(x,y,panel[panelnum-1].image);
end;
end;