工程自动创建mainform,mainform窗体创建后,调用loadform窗体。
loadform的FormStyle设为 fsStayOnTop
可是每次出来loadform窗体是在最上面,当前焦点却在mainform,要自己再在loadform窗体上用鼠标点击一下才能把焦点设过来。有什么办法直接设loadform窗体为焦点??
loadform.SetFocus;不行。

解决方案 »

  1.   

    “工程自动创建mainform,mainform窗体创建后,调用loadform窗体。”因为OnCreate是窗体创建前调用的函数,而OnShow是窗体显示前调用的窗体,所以不管你在哪个里面写loadform的代码,焦点始终都会返回到mainform。可以使用一个变通的方法,用PostMessage发送消息,来调用"生成显示子窗体"的代码。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    const
      WM_MYSHOW=WM_USER+100;
    type  TForm1 = class(TForm)
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
        procedure WMMYSHOW(var msg:TMessage);message WM_MYSHOW;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses
      unit2;
    {$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
    begin
      PostMessage(self.Handle,WM_MYSHOW,0,0);
    end;procedure TForm1.WMMYSHOW(var msg: TMessage);
    begin
      form2:=TForm2.Create(Application);
      form2.Show;
    end;end.
      

  2.   

    TO: flyforlove(为情飞) 
    我调用loadform窗体,不是在mainform的OnCreate也不是在OnShow里面。而是另外写了一个函数。然后在工程文件里调用。如下:
      Application.CreateForm(TMainFrm, MainFrm);
      MainFrm.login();//这个函数调用loadform。
      Application.Run;
      

  3.   

    loadform.Show;
    loadform.SetFocus;
    loadform.WindowState:=wsNormal;
      

  4.   

    回复人: 123ppmove(迷茫) ( ) 信誉:100  2005-03-01 10:01:00  得分: 0  
     
     
       TO: flyforlove(为情飞) 
    我调用loadform窗体,不是在mainform的OnCreate也不是在OnShow里面。而是另外写了一个函数。然后在工程文件里调用。如下:
      Application.CreateForm(TMainFrm, MainFrm);
      MainFrm.login();//这个函数调用loadform。
      Application.Run;
      
    =================================================一样的,主函数的显示是在Application.Run;中执行的,也就是说焦点总是会返回给主窗体。
      

  5.   

    TO: flyforlove(为情飞)
    谢谢。你这方法可行。。