能否给个方法最好能贴个源码,多谢.

解决方案 »

  1.   

    const
      WM_DONE = WM_USER + 1;type
      TForm1 = class(TForm)
      private
        FWaitForm: TWaitForm;
        procedure DoSomething;
        procedure WMDone(var msg: TMessage); message WM_DONE;
      end;  TWorkThread = class(TThread)
      private
        FHandle: THandle;
      protected
        procedure Execute; override;
      public
        constructor Create(AHandle: THandle);
      end;.....procedure TForm1.DoSomething;
    begin
      TWorkThread.Create(Handle);
      FWaitForm := TWaitForm.Create(Application);
      FWaitForm.Show;
    end;procedure TForm1.WMDone(var msg: TMessage);
    begin
      if Assigned(FWaitForm) then FWaitForm.Free;
    end;constructor TWorkThread.Create(AHandle: THandle);
    begin
      FHandle := AHandle;
      inherited Create(False);
    end;TWorkThread.Execute;
    beign
      FreeOnTerminated := True;
      DoYourWork;
      PostMessage(FHandle, WM_DONE, 0, 0);
    end;
      

  2.   

    没看懂题目
    这个窗口是自己写的窗口?那创建时向线程发消息。
    不是自己写的(不会主动向线程发消息)?那线程用timer循环检测窗口是否创建。
      

  3.   

    是想在执行的时候出一个等待的窗体吗?用消息的方式来进行线程和窗体的联系.先创建窗体,然后创建线程将窗体HANDLE给线程,显示窗体,线程在执行时给窗体发消息,显示
    进度,线程结束时发消息给窗体关闭.
      

  4.   

    只想实现单纯的等待窗口,没必要用到线程..Sleep(10000)就可以了.
      

  5.   

    在主窗体query查询大量数据时显示用户等待窗体,当query执行完后等待窗体隐藏或关闭
      

  6.   

    用多个线程查询?查询时显示等待窗体?我的一点想法可以考虑一下。启动线程时设置线程相应查询标志fChaXun[i] := True; 判断等待窗体显示没有,没显示的话显示等待窗体;i代表第几个线程关闭线程的时候设置相应的查询标志fChaXun[i] := False;并判断是不是所有的查询标志都是False,如果都是False说明查询结束,关闭等待窗体。
      

  7.   

    主题内容说的不太清楚。
    但我的建议是别等待,而是用Hook监视
    因为等待的话,等待时长跟很多因素有关系,网络条件,数据库条件,主机条件