我要做一个程序,在屏幕上有一个panel1、button1、button2,而在panel1上又放置了一个Edit1和Label1。
现在有两个问题:如何实现在程序运行以后,
1、点击button1可以令panel1和它上面的控件成比例放大(包括字体);如125%,150%,200%
2、点击button2可以令panel1和它上面的控件成比例缩小(包括字体)。如75%,50%,25%最好有具体的代码,谢谢!!!

解决方案 »

  1.   

    把Panel和panel上所有控件放大125%
    Panel1.ScaleBy(125,100)
      

  2.   

    楼上正解但是对image控件好像不起作用
      

  3.   

    to: sdzeng(大头鸟) 
    用Panel1.ScaleBy(125,100) 虽然可以将panel放大,但是好象只是将panel的长宽加长了,而不是达到放大的效果,如panel上控件的字体不会变大,且panel上各控件的Top、Left值也会随着panel的放大缩小面改变。
    而我想达到的效果是当panel放大或缩小时,
    1、它上面的各控件及其字体也要随之成比例的放大及缩小。
    2、它上面的各控件的Top、Left值不会跟着改变。如panel上有一个button控件,它的top=20,left=30,在放大或缩小后它的top=20,left=30,保持不变。
    请问各位高手们有没什么办法能达到这一效果?在此先谢谢了!!!
      

  4.   

    把Panel上所有的控件的Anchors属性都设置为True
    即 
    akLeft = True
    akTop =True
    akRight = True
    akBottom = True
      

  5.   

    to:hqhhh(枫叶) 
    你的方法也不能达到我的要求。字体还是不变。
    真的没人能知道吗???恳请大家帮帮忙吧!!!
      

  6.   

    TForm和TFrame这些带滚动条的控件,
    实现了ChangeScale()方法,
    可以对控件本身和控件上所有子控件包括字体进行缩放
    你可以参照这个方法,自己实现一个
      

  7.   

    要想省点事情,就把Panel换成TFrame
    然后使用ChangeScale方法进行缩放
      

  8.   

    to :sdzeng(大头鸟) 
    TFrame 没有ChangeScale方法,且如果将image控件放在panel上时它里面的图象并不会跟着panel放大或缩小。
      

  9.   

    刚才试了一下,把Panel1.ParentFont:=False
    然后再Panel1.ScaleBy就可以把panel1上的控件字体放大至于说图像把Image1.Stretch := True就可以随着Panel放大
      

  10.   

    to :sdzeng(大头鸟) 
    按你上面的方法可以实现字体和image的放大,但是panel上各控件的Top和Left值却会不断变化。
    例如:panel上有个edit1控件,它的top=20,left=30,我想在panel放大之后,edit1控件的top和left值不变,能实现吗,请再帮帮我吧,谢谢!!!
      

  11.   

    自己写函数吧,ScaleBy默认把位置也放大
    给你一个做参考procedure ControlScaleBy(AControl: TWinControl; M, D: Integer);
    var
        i : Integer;
    begin
        for i:=0 to AControl.ControlCount-1 do
        begin
            //将控件的位置先缩小
            with AControl.Controls[i] do
                SetBounds(MulDiv(Left, D, M),MulDiv(Top, D, M),Width,Height);
        end;
        AControl.ScaleBy(M,D);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
        ControlScaleBy(Panel1,300,100);
    end;
      

  12.   

    to :sdzeng(大头鸟) 
    你上面的方法是可以将panel上各控件的top与left值不变动,但是各控件间的距离不会成比例放大。
    我是想实现将panel及它上面的所有控件成比例放大或缩小的效果。就象拿个放大镜看一样。
    拜托了,十分感谢!!!
      

  13.   

    实在搞不清楚你要什么了又要控件的间距成比例放大,又要top和left值不变
    这本来就是矛盾的一般放大镜的实现都是先截取屏幕上的一小块图像
    通过对图像进行缩放来实现的,不是像你这样改变控件大小
      

  14.   

    to :sdzeng(大头鸟) 
      就是实现将panel缩放,同时缩放它上面的各控件。如题。
      

  15.   

    Scaleby实现的就是整体缩放间距和每个控件的Top,Left的值是相关的
    要想保持控件的间距按照比例缩放,
    则Top,Left的值必然会发生变化
    要想保持Top,Left的值不变,
    则控件的间距必然保持会不变楼主要的那种控件的间距按照比例缩放,
    每个控件的Top,Left的值又保持不变的效果
    是没有办法实现的
      

  16.   

    我觉得楼主有点发晕了,
    现在的问题是scaleby完全能实现你说的功能,只是字体没有改变,你可以通过另写程序改变字号,
    至于你说top left什么不变,又变的,我同意sdzeng(大头鸟) 的说法,你自己好好理清思路再说吧,要不回去睡一觉,清醒清醒,