function lcl(obj : TObject);
begin
  //我怎么判断 参数中obj 是否有对象 ,用nil好象是不行的
  end;

解决方案 »

  1.   

    也就是说 当调用这个函数时
    是这样调用的
    function lll();
    var 
      obj : TObject;
    begin
      lcl(obj);
    end;
    还是这样调用的
    function lll();
    var 
      obj : TObject;
    begin
      obj := Tobject.Create();
      lcl(obj);
    end;
      

  2.   

    function lll();
    var 
      obj : TObject;
    begin
      obj := Tobject.Create();
      lcl(obj);
    end;声明后必须要调用构造函数创建对象,或者引用另一个已经创建的对象。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  3.   

    用Assigned测试对象或变量是否有效
      

  4.   

    if assigned(form1) then//已经建立
      

  5.   

    不过象你上边的问题不建立对象就调用(仅仅声明),是不对的,Assigned函数也仅仅测试是否为空,一个对象只要声明过了,就不再是空。所以没有常规的办法来测试这个对象是否是能用的。
    一般情况下根本就不用考虑这种情况,因为没有人会这样写代码,即使写了运行时会出错,所以编写代码的人也会立即修改,这样有明显错误的程序不会发布出去(因为你测试这个模块的时候根本就运行不了)。不过你硬是要费劲写的话也不是没办法。
    在try....except...and里访问这个对象只有在create后才能访问的属性或方法,如果出错了,说明这个对象没有create,否则已经create。
      

  6.   

    但这种方法也不是针对每种组件都行,好象Tobject就不行