我在Delphi6线程中:
Application.CreateForm(TForm2, Form2);    
Form2.ShowModal; 
为什么编译时没错,运行老出错啊???

解决方案 »

  1.   

    Application.CreateForm(TForm2, Form2);    
    Form2.ShowModal;你ShowModal會使得本線程掛起得。。 你用Show試一下。。注意 指定 Form2得Parent...線程安全 就是線程之間得同步,特別是在訪問相同,相關得資源時,需要自行處理好同步關系
      

  2.   

    不对啊,仅仅:Application.CreateForm(TForm2, Form2);  
    不:Form2.ShowModal;
    就出错啊!!!
      

  3.   

    Application.CreateForm(TForm2, Form2); 
    把上面这一句换成:
    Form2:= TForm2.Create(Application)
    试试看!
      

  4.   

    提示Canvas dose not allow drawing 为什么???我也遇见这个问题了!
      

  5.   

    [email protected]
    声明一下,我可不是什么高手,新手而已!
      

  6.   

    Form2:=TForm2.Create(nil);
    Form2.ShowModal;用这个!!!
      

  7.   

    一样不行啊!!!
     yuvotesyg518(小不点),我已经给你发过去了!!!
    帮个忙,代码不复杂!!!
      

  8.   

    帮您up,我也在等!!!线程中是不是不能创建Form呀???
      

  9.   

    CreateNew好像可以,不知对不对!!!Form2:=TForm2.CreateNew(nil);
      

  10.   

    代码我看了一下,这样改动,没有出现问题!原来的线程排序过程
    procedure TSortThread.Sort(var A:array of Integer);
    中的语句
    Form2:= TForm2.Create(nil);
    Form2.ShowModal;
    去掉,转而放在事件处理过程
    procedure TForm1.Button1Click(sender:Tobject);
    中去,代码大体如下:
    ...
    if not Assigned(Form2) then
      Form2:= TForm2.Create(Application);
    Form2.ShowModal;
      

  11.   

    TO: yuvotesyg518(小不点) ( ) ,这样不是我的需求:
     转而放在事件处理过程
    procedure TForm1.Button1Click(sender:Tobject);
    中去,代码大体如下:
    ...
    if not Assigned(Form2) then
      Form2:= TForm2.Create(Application);
    Form2.ShowModal;
    注意:我是要在线程中:比如那个排序语句中弹出窗体,而不是:procedure TForm1.Button1Click(sender:Tobject);中啊!!!!
      

  12.   

    to:suncjt1(菜鸟) 
    Form2:=TForm2.CreateNew(nil);
    虽然可以,但是如果Form2上放控件的话,控件不能显示出来啊!!!
      

  13.   

    不过两者的结果都是“排序完成然后弹出Form2”呀!
    procedure TForm1.Button1Click(sender:Tobject);
    begin
      setLength(asort,4);
      asort[0]:=13;
      asort[1]:=9;
      asort[2]:=15;
      asort[3]:=12;  SortThread:=TSortThread.Create(False,aSort);
      SortThread.OnTerminate:=SortOver;  if not Assigned(Form2) then
        Form2:= TForm2.Create(Application);
      Form2.ShowModal;
    end;
      

  14.   

    改动一下,应该把代码:
    if not Assigned(Form2) then
      Form2:= TForm2.Create(Application);
    Form2.ShowModal;
    放到
    procedure TForm1.SortOver(sender:Tobject);
    中去,代码变成:
    procedure TForm1.SortOver(sender:Tobject);
    var
      i:integer;
    begin
      Memo1.Lines.Clear;
      for i:=0 to 3 do
        begin
           Memo1.Lines.Add(inttostr(asort[i]));
        end;if not Assigned(Form2) then
      Form2:= TForm2.Create(Application);
    Form2.ShowModal;因为前面的代码中有:
    SortThread.OnTerminate:=SortOver;
    所以线程一终止,Form2立即显现出来。
      

  15.   

    这样也不是我的需求啊,我是要在“线程中”,而不是线程执行“之前”或“终止时”,
    简单点:我就是要在:
    for i:=High(A) downto Low(A) do
           for j:=Low(A) to High(A)-1 do
              if A[j]>A[j+1] then
                begin
                  t:=A[j];
                  A[j]:=A[j+1];
                  A[j+1]:=T;              //...........
                  if Terminated then Exit;
                end;
    的注释处弹出。
      

  16.   

    首先确定已经uses了Form2.pas这个单元了
    然后要是是在project里面
    则Application.Initialize;
      Application.CreateForm(TForm2, Form2);
      Application.run;
      
    要是在另外一个form或者unit里面
    可以这样写
      try
       Form2:=TForm2.Create(self);
       Form2.ShowModal;
      finally
       FreeAndNil(Form2);
      end;
    不知道这样行不行:)
      
      

  17.   

    Form2:=TForm2.CreateNew(nil);
    虽然可以,但是如果Form2上放控件的话,控件不能显示出来啊!!!
      

  18.   

    to: zhao1210(jeason) 
    这样也不行啊
      

  19.   

    终于我给解决了,哈哈!!给你的线程新增加一个无参数的过程:
    type
      TSortThread = class(TThread)
      private
        { Private declarations }
        FSortArray:array of integer;
      protected
        procedure Execute; override;
        procedure Sort(var A:array of Integer);
        //这是个新加方法,用于显示Form2 
        procedure Show;
      public
        constructor Create(CreateSuspendend:Boolean;var SortArray:array of integer);
      end;procedure TSortThread.Show;
    begin
      if not Assigned(Form2) then
        Form2:= TForm2.Create(Application);
      Form2.ShowModal;
    end;然后,原来线程排序过程
    procedure TSortThread.Sort(var A:array of Integer);
    中,出现
      if not Assigned(Form2) then
        Form2:= TForm2.Create(Application);
      Form2.ShowModal;
    的地方改为:
    Synchronize(Show);
      

  20.   

    嗯,好,是我的需求,非常感谢。。
    不知可否指点:Synchronize() 函数的作用???
      

  21.   

    交个朋友吧,我的QQ:341039256
    你的QQ呢?