以前学vc++,现在学DELPHI,有太多的不能理解的地方,望大家帮帮忙。在delphi中,一个窗体对象的实例化可以有两中方法
1.Tform.create
2.application.createform()
问题:
1.这两种方法有什么不同吗?
2.我们使用C++的时候,创建窗口分两步,创建C++对象、创建窗口,在delphi中是不是对象实例化后,窗口就同时创建了?在C++中销毁窗口也分两步:Destroy窗口、销毁c++对象;在Delphi中是不是销毁对象后,窗口也自动的销毁了?那么Delphi中的show,showmodal 函数只是显示窗口了,close函数只是隐藏窗口了???如果是这样,那么在delphi中是否有销毁窗口而又不销毁对象的方法,销毁对象的方法又是什么?WM_CLOSE,WM_DESTROY的消息响应函数又是什么??
3.如果我点击窗口上的关闭按钮,窗口是被销毁了还是被隐藏了(在vC++种点击关闭按钮,正常情况下,将会产生两个消息,WM_CLOSE,WM_DESTROY窗口会被销毁)?
4.ONCREATE到底是在对象被实例化的时候调用,还是窗口被创建的时候被调用?
5.第一种创建的对象要显式的被销毁吗?第二种方法是不是不要显式销毁对象?以下是关于数据库的,1.在数据模块中定义了一个TADOconnect对象,然后在一个窗体定义了数据集对象,数据源对象和数据感知控件,那么是否可以说我这个程序运行的过程中,数据集对象是存在的且不关闭放的(在c中,使用了数据集的智能指针要关闭的,当智能指针对象关闭的时候调用的CLOSE函数),也就是说数据集对象是一直有效的,可以这样理解吗?2.如果要关闭数据集对象中的数据集,准备获取新的数据集应该调用什么方法?是不是要销毁数据集对象,然后重新实例化才可以?3.如果我将某个数据集通某个数据源关联,然后数据源和某个数据控件关联,那么当我数据集重新获得的时候数据控件怎么更新啊???

解决方案 »

  1.   

    是啊!!我们还要学vc++呢..呵呵,,你就把vc++学精就可以了啊..
      

  2.   

    开始回答问题:
    1、TForm.Create不能加载资源,就是对象的属性,以及包容的对象属性不能够从资源中读出预定值并且自动设定,Application的CreateForm是可以的。其实差异决定在Create和TObject的NeInstance的差异上面。2、Delphi当中也是分开的,对象是对象,窗口是窗口,不过有时候觉察不到。3、窗口关闭在Delphi当中,并没有销毁对象,销毁对象,那么窗口绝对关闭。Close是关闭了窗口,不是隐藏。4、响应消息,在Delphi中处理成了一种类方法,后面带有关键字message,后面加上你要响应的消息。你可以重载WndProc等等对象方法,来处理你的消息。Delphi封装了几乎全部的Windows消息,并且有相应的事件,你只需要像在VB中那样在事件中进行处理。事件是一种类方法类型的属性。5、OnCreate是在对象创建的时候的事件,不是窗口创建或者显示的时候的事件。6、数据集对象除非你释放他,否则一直存在,但是这不表明,它背后的ADO组件仍然存在,Delphi中的接口指针也是智能的,但是通常不需要你去直接操纵ADO组件的接口。7、不需要这样做,只需要关闭数据集对象,然后给他一个新的数据表名,或者给他新的SQL语句,然后再打开就可以了。8、你的数据集获得新的数据,你的数据控件就会知道,并且做出反应,要不然怎么叫做数据感知控件?
      

  3.   

    close是只隐藏窗口。其实DElphi的窗口操作都调用低层的API函数。和VC的底层没多大区别。
    Delphi的对像其实都是指针。用Create创建,用Free销毁。OnCreate应该是窗口创建时调用。Object Pascal它的类也有构造函数。wm_close 和wm_destroy都被封装了。学学Delphi的组件,你就会明白后几个问题。
      

  4.   

    1.其实没多大分别, 是一样的, 建议使用CREATE构造函数, 而CREATEFORM是DELPHI在初始化的时候用的.
    2. delphi的对象实际上就是指针引用, 如果你声明 Form1: TForm, 这一部没有实例化form1,你必须要用create构造,才能使用该对象, 他不象C++的构造函数的自动调用,
        简单讲就是:如果你声明了一个对象变量,那么你就必须自己调用构造函数来创建该对象.同时,你也必须要负责他的销毁, 建议调用free
      close只是很简单的隐藏了窗口, 但没有释放, 你可调用show过程再显示出来.
    3.是隐藏, 不是销毁. 对应的响应事件在属性面板中有. 你一看就明白了
    4.这根对象只是一个指针引用, 所以是在对象创建是时候调用的. 即:oncreate事件中
    5.一个原则:凡是你创建的, 就要由你来释放, 但对与生存期自管理的对象, 当引用记数为0的时候,该对象将自动销毁.数据库
    1.数据集是否关闭,要看他的ACTIVE是真还是假,开只是他一个状态而已,你可以在代码中随意控制,因为对象是存在的嘛,.2.no, 你先关闭他, 然后再设定他的参数, 对QUERY控件,你只要重新指定sql属性,写上新的查询语句, 然后调用EXCUTE过程就可以了. 3.这不需要你做任何事情, 因为数据集控件是数据敏感的,会自己自动更新. 你可以去看一下,TDataLink类.
      

  5.   

    implementation
    var
        f: TForm;
    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        f := TForm.Create(nil);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        f.Show;
    end;
    end.对于点击系统的关闭按钮,试一下这两句话, 我象你就明白了.close是什么意思了
      

  6.   

    BlueTrees(蜗牛) Close是关闭了窗口,不是隐藏。关闭指什么?销毁?比如窗口上有一个TEdit组件。你输入个1.然后再关闭。当你再显示时TEdit还是1.我到觉得这是隐藏。
      

  7.   

    对不起,是我弄错了,不好意思,Delphi中关闭的处理是隐藏,窗口句柄仍然存在。
      

  8.   

    那么关闭窗口一定要free对象吗?
      

  9.   

    我学了好长时间的VC++,也主要用C++,曾经写过ADO方面的程序;但是总感觉利用vc++很烦,特别做界面不方便(但是很地层,可以学很多东西,不会象DELPHI对windows方面的不了解)我学DELPHI是因为做个兼职,一定要DELPHI。没有办法。
    现在我终于明白了。BlueTrees(蜗牛) 你的第一回答我整好长时间没有明白,CLOSE还是应该隐藏窗口不过还是要谢谢你。
      

  10.   

    顺便问个简单的,因为DELPHI封装了很多WINDOWS方面的东西,在vc中有很多方法可以关闭程序如:发送WM_QUIT消息,使用C运行时库,使用进程管API等。那么在DELPHI可以使用那些方法呢?使用VC可以有MSDN,DELPHI的自带的帮助使用起来不方便啊,有什么其它的方法啊?
      

  11.   

    关闭主窗口MainForm.close、Application.Terminate和halt;
      

  12.   

    我的第一回答?Form.create和Application.createForm的确是有差异的啊!据个例子,你做了一个对话框,用了一个Form,在上面放了一点东西,你用它的类的Create看看什么效果?里面的组件的属性都是默认值,没有一个是你在设计期当中设定的。
      

  13.   

    两个窗体A\B,用A调用B,A.show同时B关闭,但A为什麽也随着B关了呢
      

  14.   

    BlueTrees(蜗牛):
    http://expert.csdn.net/Expert/topic/1506/1506038.xml?temp=.5817072