我想问一下像adoquery,datasource这种控件是不是不用动态创建,只要定义一个这种类型的变量就可以直接用了啊?如:  g_adoquery:array [0..11] of TADOQuery;
  g_datasource:array [0..11] of TDataSource;
这样就可以直接用了?那和用creat创建出来的有什么不同?还需要释放吗?

解决方案 »

  1.   

    不可能的,必须要Create才能用
    只不过把一个控件拖放到窗体上的时候,
    Delphi会自动调用Cerate方法不信,试试下面代码,肯定报地址错误
    procedure TForm1.Button1Click(Sender: TObject);
    var
        g_adoquery:array [0..11] of TADOQuery;
    begin
        g_adoquery[0].SQL.Text := 'select * from tables';
    end;
      

  2.   

    可是我如果把一个已经创建好的adoquery赋值给g_adoquery是不是就不用创建了呢?即:
    g_adoquery[0]:=adoquery
      

  3.   

    定义g_adoquery时,等于声明了一个tadoquery类型的指针,但并没有创建adoquery控件,这个时候时不能使用的,把创建好的adoquery赋值给g_adoquery等于把adoquery控件的地址指针赋值给了你声明的变量,这个时候g_adoqurey指向了了原来建立好的控件地址,也就是说g_adoquery和adoqurey是同一个对象,而用create方法,是创建了一个新的对象.
      

  4.   

    對,如果不直接放入控件,而單純用代碼的話,還是create最後free
      

  5.   

    那是不是只有creat的对象才要释放,像g_adoquery这种直接赋值的变量就不用释放了呢?