在一个form里做了一个用画笔画图的操作后,form变小了,(50分)

R

Ruth

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个form里做了一个用画笔画图的操作后,form变小了,
必须的双击或拖动才能看到全部,怎么能让form不受那个操作的影响,依然是原来的样子。
 
先将你的代码贴出来
 
不会吧?
 
代码如下,敬请指教!
procedure Tcjxm_add_frm.mfgt_butClick(Sender: TObject);
var tmp_str,substr1,substr2:String;
i,depart:integer;
Rwidth,Rheight:Real;
scale:Real;
Lpoint:array[0..30]of Tpoint;
begin
if(fgfwzb.Text<>'')then
begin
width:=0;
height:=0;
syt_panel.Visible :=true;
syt.Show ;
// syt.Visible :=true;
Startx:=0 ;
Starty:=0 ;
syt.Canvas.Brush.Color:=clYellow; //设置画刷和画笔
syt.Canvas.Pen.Color :=clBlack;
syt.Canvas.Font.Name :='Arial';
syt.Canvas.Font.Size:=8;
syt.Canvas.Font.Color:=clRed;
width:=syt.Width-20 ;
height:=syt.Height-20 ;
//将输入的满覆盖坐标写入坐标数组
minX:=30000000;
minY:=30000000;
maxX:=0;
maxY:=0;
for i:=0 to fgfwzb.Lines.Capacity -1 do
begin
tmp_str:=fgfwzb.Lines.Strings;
depart:=Pos(',',tmp_str);
substr1:=Copy(tmp_str,0,depart-1);
if(substr1='')then
begin
showmessage('坐标信息不完整。');
exit;
end;
substr2:=Copy(tmp_str,depart+1,length(tmp_str)-1);
if(substr2='')then
begin
showmessage('坐标信息不完整。');
exit;
end;
X:=StrToFloat(substr1);
Y:=StrToFloat(substr2);
if(X<minx)then
minX:=X;
if(X>maxX) then
maxX:=X;
if(Y<minY)then
minY:=Y;
if(Y>maxY)then
maxY:=Y;
end;
Rwidth:= maxX-minX;
Rheight:=maxY-minY; //包含满覆盖范围的矩形的宽和高
if(width/Rwidth<height/Rheight)then
scale:=width/Rwidth
else scale:=height/Rheight;
//转换坐标,画出示意图
i:=0;
Coordernate_convert(X,Y,scale,Lpoint);
syt.Canvas.MoveTo(Lpoint.X ,Lpoint.Y);
for i:=1 to fgfwzb.Lines.Capacity -1 do
begin
Coordernate_convert(X,Y,scale,Lpoint);
syt.Canvas.LineTo(Lpoint.X ,Lpoint.Y);
end;
syt.Canvas.LineTo(Lpoint[0].X ,Lpoint[0].Y);
for i:=0 to fgfwzb.Lines.Capacity -1 do
syt.Canvas.TextOut(Lpoint.X+5,Lpoint.Y+5,IntToStr(i)+':'+FloatToStr(X)+','+FloatToStr(Y));
end
else
showmessage('没有满覆盖区坐标信息,无法生成示意图。');
// cjxm_add_frm.WindowState :=wsMaximized;
// cjxm_add_frm.Invalidate ;
end;
//将实际坐标转化成物理坐标
procedure Tcjxm_add_frm.Coordernate_convert(DpointX:Real;DpointY:Real;scale:Real;var Lpoint:Tpoint);
var posn:Integer;
tmp_str:String;
begin
Lpoint.X:=Startx+Trunc((DpointX-minX)*scale);
Lpoint.Y:=Starty+Trunc((DpointY-minY)*scale);
end;
 
其实你做的是控件,我建议你最好在,Create中初始化.
 
".Create中初始化"能具体说一下吗?.初始化哪些东西?
 
顶部