在D2010中发现一个奇怪的问题,窗体创建时,取窗口大小值不正确,procedure TForm4.FormCreate(Sender: TObject);
var w,h:integer;
begin
     form4.WindowState:=wsMaximized;
     h:=form4.Height;
     w:=form4.Width;
     ......
end;   发现 h,w 都不是窗体最大化后的值,还是程序设计时的默认大小值,怎么回事?如何取正确的值呢?以前D6没有这回事呵?

解决方案 »

  1.   

    你在Create事件中取最大化尺寸当然不行,此时窗口还没有建立,在OnActive或者OnShow事件中获取实际窗口尺寸
      

  2.   

    “在OnActive或者OnShow事件中获取实际窗口尺寸”我试了,也不行呵??
      

  3.   

    试了一下,真的不行,但这不是D2010特有的,D7也一样。看来只能在OnResize事件中获取窗口尺寸了。
      

  4.   

    我也试了一下,放在OnActive或OnShow或按钮Click事件都可以啊
    D7和D2010都一样
    测试代码是这两句
      WindowState := wsMaximized;
      Caption := IntToStr(Width) + ':' + IntToStr(Height);
      

  5.   

    我测试时,没有把WindowState := wsMaximized;移到OnActive或OnShow。
      

  6.   

    我测试没问题
    procedure TForm1.FormCreate(Sender: TObject);
    var
      W, H: Integer;
    begin
      Memo1.Lines.add(Format('%d %d', [H, W]));
      Form1.WindowState:=wsMaximized;
      H := Form1.Height;
      W := Form1.Width;
      Memo1.Lines.add(Format('%d %d', [H, W]));
    end;end.4516632 9770952
    563 979
      

  7.   

    说那么多干嘛,就是create事件并不能获得窗体的大小。
      

  8.   

    D6是可以的,以前都用过。 D2010不行,onshow,onactive,onresize我都试了.......但click 一下窗体时就正确了。不知道怎么回事?不管怎么说,谢谢大家!