我真的没办法了?

jasminemao 2001-10-30 07:40:00
我现在在一个窗体上动态创建一个panel控件,然后再在该panel上动态创建一个image(它的parent是panel),这个image的align属性设为alclient,然后再在image上画图,但现在的问题是image 上的图怎么也显示不出来,但如果把panel静态创建,把image动态创建,image上的图能显示出来,这是为什么?要达到我的目的,我应该怎么办?谢谢!
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasminemao 2001-10-31
  • 打赏
  • 举报
回复
我的原意是想实现微软的NETMEETING那样的效果,把每个图形元素都作成对象的形式。但我怎么也实现不出来。
jasminemao 2001-10-31
  • 打赏
  • 举报
回复
怎么没人理我,大家帮帮我嘛。
cobi 2001-10-30
  • 打赏
  • 举报
回复
头晕,可以把代码mail过来漫漫看吗?
xiaoxin-lee@163.com
jasminemao 2001-10-30
  • 打赏
  • 举报
回复
代码很长,我把他贴出来了,麻烦大家帮我看看,谢谢!
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;

end.
kevin_gao 2001-10-30
  • 打赏
  • 举报
回复
代码贴来看看!
jasminemao 2001-10-30
  • 打赏
  • 举报
回复
没用的,这应该是程序什么地方出了点问题,而不是刷新的问题。
westfly 2001-10-30
  • 打赏
  • 举报
回复
用update刷新一下。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧