请教关于一个窗体resize后控件位置的问题(50分)

  • 主题发起人 爱与和平
  • 开始时间

爱与和平

Unregistered / Unconfirmed
GUEST, unregistred user!
开始想在窗体上方一个panel控件,并且左右居中
我就让panel.left:=round((form1.width-panel.width)/2);可是但image的初始宽度超过了
窗体宽度,移动滚动条后在缩放,image就不居中了.
后来我想干脆相对屏幕居中,结果还是一样
p:=screen.ActiveForm.ScreenToClient(form1.ClientToScreen(point(panel1.Left ,panel1.Width )) );
panel1.Left :=round((screen.Width-p.X )/2);
而且,如果在初始化时panel1的宽度大于窗体的宽度调试时就报错,sigh
 
难道我的问题过于简单,大家都不愿意回答???
但看在分的面子上,大家也说一下丫
 
你是不是在做看图工具啊
 
你搞三个Panel放到桌面上

Panel1.align:=alLeft;
Panel2.Align:=alClient;
Panel3.Align:=AlRight;

你再REsize你的窗口试试,看看变化一定会有收获。。
 
倒,我不是要让他靠左,靠右,我是要让他居中
 
补充del520的语句:
panel1.width := 0;//可以用一个其它的正整数
panel3.width := 0;
panel1.autosize := false;
panel3.autosize := false;
panel2.autosize := true;
Panel1.align:=alLeft;
Panel2.Align:=alClient;
Panel3.Align:=AlRight;
这样的结果是panel2相对于form居中

另一方法://此方法当form.width - panel.width < 9时会不居中
procedure TForm1.FormResize(Sender: TObject);
var
l : integer;
begin
l := (form1.Width - panel1.Width) div 2;
if l > 1 then panel1.Left := l
else panel1.Left := 0;
end;
 
to dlnew:
你的第一个方法不适合我用,因为限制了panel的大小
第二个方法跟我的方法差不多,也一样有移动滚动条后panel跑偏的现象,你不信自己试一试.
窗体上放一个panel,偏右放,使窗体出现横向的滚动条,然后运行,先不移动滚动条点最大化,
然后把滚动条移到最右边,在点最大化,试一试看看
 
第二个方法我试过,也知道这个现象。但你可以把form的大小限定,即不让它小于某一值。
第一个方法没有限制PANEL的大小。这里的PANEL1和PANEL3是用来限制PANEL2左右两边与FORM的左右两边
的距离的,真正用到的PANEL是第二个PANEL。
 
dlnew
sigh,我的panel是比屏幕还要宽的,这两个方法好像都不管用,能不能再想想办法!!
 
好吧,试试这个:
panel1.left := screen.Width div 2 - panel1.width div 2
 
你要解决的问题好象不是控件移位,而是怎么样才能让图形居中吧。
如果是,你就使用下面的演示代码看看有没有可以利用的地方:
 
试一下在该面板的左右各放一个panel,分别局左,居右(宽度自己调节),放图片的面板居中,设置image的格式,看是不是这样。
 
dlnew:
还是不行
后面两位:
你们好像没明白我的意思,这个有点像word,word里的那张纸总是相等于word窗口是居中的,我要的
就是这个效果,可是,我的问题就是,我的这个纸比较宽,比我的这个窗口还有宽,那么窗口就有
横向的滚动条(word也是这样的),我移动滚动条后再点最大化按钮,就不能相对我的窗口居中了,
而word是可以的.sigh,不知道,这下我说明白了没有
 
说说看你到底要做什么,是不是这样:一个窗体,标题叫做“爱与和平的ACDSee”,中间一个窗口,
窗口有滚动条,窗口里有一个TImage之类的东西,可以看一张图片。你可以按缩放按钮,TImage就连
带着图片缩放,图片大了,超过窗口了,就出滚动条,但是仍然可以自动让图片居中。是吗?
 
你到底有没有用 Panel 呢?
 
不要用panel了,用scrollbox吧。
我已经试成功了。
下面是代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
if image1.Width > scrollbox1.Width then
begin
scrollbox1.HorzScrollBar.Range := image1.Width;
scrollbox1.HorzScrollBar.Position := (scrollbox1.HorzScrollBar.Range - scrollbox1.Width) div 2;
image1.Left := (-1) * scrollbox1.HorzScrollBar.Position;
end
else begin
scrollbox1.HorzScrollBar.Range := image1.Width;
scrollbox1.HorzScrollBar.Position := 0;
image1.Left := (scrollbox1.Width - image1.Width) div 2;
end;
if image1.Height > scrollbox1.Height then
begin
scrollbox1.VertScrollBar.Range := image1.Height;
scrollbox1.VertScrollBar.Position := 0;
image1.Top := 0;
end
else begin
scrollbox1.VertScrollBar.Range := image1.Height;
scrollbox1.VertScrollBar.Position := 0;
image1.Top := (scrollbox1.Height - image1.Height) div 2;
end;
end;
 
谢谢dlnew和大家,发分了
可能是我未表达清属,呵呵,dlnew理解正确
 
顶部