在Resize事件里面使用ScaleBy来完成控件与窗体同比例增减
老是不成功有没有成功的代码分享一下不是修改align属性和anchors属性我需要的是连控件里面的字符也跟着变大变小
就像暴风影音放电影时下面的字幕会随着暴风影音窗体的大小而相同比例地变大变小测试了几个小时都没成功,头痛了,希望CSDN的朋友能帮帮我

解决方案 »

  1.   

    有个问题,有些控件的大小改变是有限制的,如Combobox,可以变宽,但不能改变Height值。
    或许可以尝试对控件进行重画?
      

  2.   

    我知道在一个铵钮事件里用ScaleBy(150,100)就可以放大1.5倍但在Resize事件里面这样用的话,窗口就变为无限大了,可能因为你拉一点窗体这个过程就执行了NNNNN次了
    现在想问的就是如何去控制
      

  3.   

    procedure TForm1.Timer2Timer(Sender: TObject);
    begin
      if not (form1.ClientHeight = 50) then
       begin
        form1.ClientHeight := form1.ClientHeight - 10;
       end
       else timer2.Enabled := false;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not (form1.ClientHeight = 350) then
       begin
        form1.ClientHeight := form1.ClientHeight + 10;
       end
       else timer1.Enabled := false;
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      timer2.enabled := true;
      BitBtn2.visible := true;
    end;procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
      timer1.enabled := true;
    end;使用TTime 就可以了。你自己试一下看看吧,应该可以达到你要的效果吧!
      

  4.   


    我试了试,通过获取Form当前的ClientHeight和ClientWidth,然后与先前的ClientHeight和ClientWidth比较,从而执行ScaleBy(或ChangeScale),通过函数中M和D这两个参数的不同来进行缩小或放大(M < D则缩小;M > D 则放大),但是一缩一放之后会发现控件变形了(无法还原到最初的大小),感觉问题还在M和D值的设定.
    通过查看ScaleBy类过程的实现以及相关函数的调用,他们的参数都是Integer类型。
    昨晚本来还想尝试参照他们的写法重新写一个过程,却发现不好弄,调用太多了,如果真如我那样想,就要写一大堆函数或过程了,显然不实际。
      

  5.   

     
    在Resize事件里面写时注意,多次激发时只取最后一次,自己建个变量构造一个缓冲区。
      

  6.   

    不要用SCALEBY,会影响排版的,而且字体的缩放和控件也不对应还是用ALIGN和ANCHORS吧,这才是保证排版好看的关键
      

  7.   

    ScaleBy会缩放字体的。对单个控件,或者简单界面,还是可以用用的,复杂界面不推荐,很难设计排版的,你会发现一SCALEBY,某个控件就会挡住了周围的控件,然后控件间的间距等也很成问题。字幕的话,我觉得当成图片那样画上去比较好处理缩放。
      

  8.   

    ScaleBy会搞乱排版?
    不会吧,我怎么不觉得,
    ScaleBy就相当于放大镜和缩小镜一样,怎么会搞乱排版?
      

  9.   

    会的。当然还看怎么设置。之所以会乱排版,感觉还与M和D值的设置有关,缩小之后,再放大无法还原,因为两个参数都是Integer类型的,如果是Double类型的可能要好整些,不过也是可能而已。