procedure ......;
var
  obj:Tcomponent;
begin
  if not assigned(obj) then
  begin
    obj:= Tcomponent.create(nil);
     .
     .
     .
  end;
  .
  .
  .
end;问题 : 无论是否已经执行了obj:= Tcomponent.create(nil);  
        assigned(obj)都不为空
请问如何判断obj是否已经create?

解决方案 »

  1.   

    释放时要置空。
    obj := nil;
      

  2.   

    用完OBJ时free掉然后让它为NIL才可以
      

  3.   

    那么如何判断obj是否已经create?
      

  4.   

    if obj = nil then obj:= Tcomponent.create(nil); //这样行不?
      

  5.   

    用完OBJ时free掉然后让它为NIL才可以
      

  6.   

    kevin_lmx我试过了
    这样也不行
    大家没有遇到过 要判断一个实例是否已经创建的问题么
      

  7.   

    var
      obj:Tcomponent;
    把它定义成全局的就可以了,在局部变量里面不行
      

  8.   

    看看这个,我调试过是没有问题的。或者你贴完整的代码来看看。
    ===========================================================================
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        obj:Tcomponent;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      obj:= Tcomponent.create(nil);  //创建
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if assigned(obj) then  //如果已经创建就释放,没有创建就什么都不做
      begin
        FreeAndNil(obj);
      end;
    end;end.
      

  9.   

    可以了 
     
    我是在keypress事件里定义的
    当首次按键时 创建实例
    再次按键时 不再重新创建这个实例 执行下面的代码为什么obj定义成全局变量可以 局部不可以