TApplication之所以这样实现是设计的原因,TApplication其实是一个0*0大小的不可见窗口,它是进程的MainForm,而用户定义的MainForm其实是这个窗口的子窗口,其创建和销毁由TApplication窗口负责。不应该想当然的认为这样不对

解决方案 »

  1.   

    回Nicrosoft:
    我知道,通过查进程的消息就可以知道啦。可是我觉得好没有必要。
    或者为什么不将MainForm绑定到TApplication上。
      

  2.   

    你想最小化有动画效果,可以自己编程实现,倒不是很难,可以问我!菜单也是可以解决的,但我以前倒没想到这个问题,其实,你在窗体的属性中,应该可以设置出现的菜单项的。再还有,是ms利用自己掌握操作系统,不让其它公司直接使用它的库文件,如果能够直接将VC与delphi转来转去,那要么delphi变成C++了,要么VC变成pascal了。
    有时候啊,有难题解决不了,要多想想办法,不要自己不会就怪别人不行,想一想自己的通用问题吧!
    但我在用时,倒是发现,从delphix.x到delphi6,一直都有个问题,如果,你将A FORM设成MDI MAIN,B FORM设成MDI CHILD,然后,两个再改回normal,那么,显示会不正常,一运行,两个窗体都出来拉!
      

  3.   

    迄今为止,我看到的解决VCL最小化问题最好的方法在《程序员》上刊登过。简直天衣无缝!因为TApplication对象被隐藏掉了,任务栏上的按钮时TForm的。所以,跟普通的Windows程序没什么区别。可是那个程序是Pascal的,只能用在Delphi,谁能帮我改一改,将其改成用在BCB下。不胜感激。我的问题在这个链接下,多谢。
    http://www.csdn.net/expert/TopicView.asp?id=160663
      

  4.   

    to aiirii:
    我不是因为解决不了才来贴这一份帖子,而是因为Borland对有些问题实在不够重视,既然可以很容易就解决掉的问题,为什么让我们来操心呢?应该让我们更加注重程序本身的开发,而不是为这些伤脑筋。这不是RAD所推崇的吗?其实,程序最小化问题最重要是体现在DirectX程序的开发上,DirectX程序最小化时,会在屏幕上留下一个title bar,然后才消失(Delphi5和BCB5以上),非常不好看。如果用户在未消失前点了那个title bar的话,程序又会恢复。
      

  5.   

    TApplication这样的设计是有原因的!!!!
    不要不懂就乱批评!
      

  6.   

    为什么MFC没有类似的缺点?有缺点为什么不改进?
    用户的需求第一。
    难道责备用户无理取闹?如果谁能帮我解决 http://www.csdn.net/expert/TopicView.asp?id=160663
    这个问题,不胜感激!
      

  7.   

    说说为什么TApplication要这样设计吧,确实不太习惯,想在任务条上多显示几个窗体按钮都不行。
    这难道是Borland推行的一种新的程序构架思想吗?laozhongcheng(成成):
        把解决VCL最小化问题最好的方法公布一下好吗?
      

  8.   

    像Delphih或BCB这样的对Application进行此种封装的开发工具非常多,比如linux上著名的qt,这代表了软件开发业界的一种代表思路,不仅仅是borland这样做。
    另外,回答jiker的问题:想在任务条上显示其他窗口需要重载那个窗口的createparam方法,为它的风格添加一个参数,这个参数好像是app什么的,可以在win32 sdk的createwindow主题中找到这个风格,把它或(or)到此窗口的原有风格中就没有问题了。
    其实VCL是一个大宝库,只要你有时间,就应当去trace它。
      

  9.   

    to Jiker:
    程序员 第6期上有
    1.新建Application
    2.新建Unit, 命名为RunFirst.pas
      其中在implement后面,加入
      initialization
      islibrary := true;
    3.在工程源文件里,在uses最前面,加入
      'RunFirst' in RunFirst.pas
      到
      form, 前面  var
        Form : TForm  在实现部分
      Application.Initialize;
      Application.ShowMainForm := False;
      islibrary := true;
      Application.CreateForm ( TForm, Form);
      Form1 := TForm1.Create ( Application);
      Form1.Show
      Application.Run
    在Form1的OnClose事件中,加入
      Application.Ternamite
      

  10.   

    上面的程序谁有办法改成BCB版吗?
      

  11.   

    laozhongcheng:
      你说的方法没有什么特殊效果呀。
      我做了一个真正完美的方法,感觉不到有Application,大家可以试试:主程序中:
      Application.Initialize;
      Form1:=TForm1.Create(Application);//修改工程属性,将自动创建去掉。
      Application.Run;
      Form1.ShowModal;在窗体中:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or not WS_EX_APPWINDOW);
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
    end;
      

  12.   

    我也是试了的,不会乱说。而且直接分析我认为你的方法虽然隐藏了主窗体,但没有隐藏Application的任务条按钮,而就是这个按钮有问题。
      

  13.   

    我的delphi 5 + pack 2
    没有这问题,delphi 4没有最小化动画
    哈哈,D6也有这毛病?
      

  14.   

    主要不是要动画,是要正常的Windows.
      

  15.   

    to Jiker:
    看一下程序员 第6期吧。
    也许我抄的时候抄错了。
    在专家答疑里边。