1.新建一个工程-->>修改Form1的创建方式为手动创建    Form1 := TForm1.Create(Application);
2.运行程序:右击程序在任务栏上的图标:出现关闭、最小化的菜单
3.单击关闭菜单,发现竟然失效了……………………
4.有什么方法可以让关闭菜单有效?
Application.Initialize;
  Form1 := TForm1.Create(Application);
  Form1.ShowModal;
  Application.Run;

解决方案 »

  1.   

    Form1.ShowModal;
    改成
    Form1.Show;//为什么要用独占式的啊!改成这个试下看!
      

  2.   

    Form1.Show;运行不起来,,运行来窗体会自动关闭,
    我这个
    Form1 := TForm1.Create(Application);
      Form1.ShowModal;
    其实做的是一个登陆窗口,
    用的是 if Form1.ShowModal = mrok then
    //进入主窗体
    else
    //退出系统的功能,,
    但是发现上面的那个功能失效了 ,,
    虽然不是什么大问题,但看看有没解决方法
      

  3.   

    楼主:你的写法有问题。一个project中有很多窗体,其中只有一个是主窗体。哪个是主窗呢? 只要看一下主程序:  Application.Initialize;
      Application.CreateForm(TForm2, TForm2);
      Application.CreateForm(TForm1, Form1);
      Form1.ShowModal;
      Application.Run;其中第一个创建的窗体就是主窗体! 这里就是Form2 。主窗体是自动显示的,不需要显式调用 show方法 。
    程序运行时,主窗体不应该被关闭,因为一旦关闭主窗体,整个程序就会结束。你要创建登录功能,借用你的代码,可以稍微修改一下:  Application.Initialize;
      Application.CreateForm(TMainForm, MainForm);
      Application.CreateForm(TForm1, Form1);
      if (Form1.ShowModal<>mrOK) then exit;
      Application.Run;这样就行了。
      

  4.   

     Application.Initialize;
      Application.Title := '系统模版';
      Application.CreateForm(TData, Data);//数据模块
      Application.Run;
      SysLoginForm := TSysLoginForm.Create(Application);
      if SysLoginForm.ShowModal = mrok then
      begin
        Application.CreateForm(TOSysMainForm, OSysMainForm);
        OSysMainForm.ShowModal();
      end
      else
      begin
        SysLoginForm.Free;
        Application.Terminate;
      end;
    其实我是这样考虑的--->>因为主窗体要动态加载菜单等操作--->>让登陆窗口最先加载进来可能运行的比较快些,,,
      

  5.   

    程序创建主窗体时做了一些处理
    看看application.createform的代码就知道了
      

  6.   


    看一下这里吧:http://topic.csdn.net/u/20090321/15/3c1f3733-b945-4dea-bbed-9b5074179f7c.html
      

  7.   

    如果是主窗体,用application.createform创建时,会创建一个应用的句柄,这样应用程序就能处理windows消息了,这个应该就是delphi支持windows消息机制的方法吧
    我也是一知半解,要是有大牛解释一下就好了
      

  8.   


    以前有一本《Delphi 高手突破》(作者:申旻),这方面讲得很详细,可找出来看看。
    由于Delphi封装得太好,把Windows应用程序的许多细节给“屏蔽”掉了,要想真正弄懂,还得学 VC ,如许多高手所说的:学时VC,用时Delphi 。
      

  9.   

    其实我发现这个问题似乎有点难解决,
    1.如果用application.createform按先创建主窗体的话:
    那登陆窗口的右击按扭将失效,
    2.
    如果用application.createform先窗体登陆窗体的话那么主窗体的右击按扭将失效
    而且觉得一般的程序都应该是先创建登陆窗体再创建主窗体
      

  10.   


      Application.Initialize;
      Application.Title := '系统模版';
      Application.CreateForm(TOSysMainForm, OSysMainForm);
      Application.CreateForm(TData, Data);//数据模块
      SysLoginForm := TSysLoginForm.Create(Application);
      if SysLoginForm.ShowModal <> mrok then
      begin
        application.showmainform = false;     
      end
      else
      begin
      SysLoginForm.Free;
      end;
      Application.Run;另外,的帖子里这样做,你可以试试
     if SysLoginForm.ShowModal = mrok then
      begin
        application.run;    
      end
      

  11.   

    樓上的哥們,,看什麼源碼??
    以上這麼多兄弟的做法似乎都解決不了這問題,你說下你的解決方案?
    if SysLoginForm.ShowModal = mrok then
      begin
        application.run;    
      end這樣子似乎也不行,以前是這樣寫的,,後來更新Mssql控件後運行發現有錯,改了
      

  12.   

    Application.Initialize; 
    Application.Title := '系统模版'; 
    Application.CreateForm(TOSysMainForm, OSysMainForm); 
    Application.CreateForm(TData, Data);//数据模块 
    SysLoginForm := TSysLoginForm.Create(Application); 
    if SysLoginForm.ShowModal <> mrok then 
    begin 
    application.showmainform = false; 
    application.Terminate;
    end 
    else 
    begin 
    SysLoginForm.Free; 
    Application.Run; 
    end; 
    这样呢?