胡说几句:
利用了Stream机制
TReader类起了很大的作用

解决方案 »

  1.   

    右击窗体,选view as text
    你就知道了
      

  2.   

    View as Text这当然我知道,只是这些文本该不会自己去创建窗体吧?我想知道的
    是wave_calmly(静波),outer2000(天外流星) 两位说的,TReader对象是不是调用了API函数CreateWindow来创建窗体?是怎样创建的,我很想知道其中细节
      

  3.   

    我猜测可能是读取text中的数据,作为api函数的参数,delphi封装了其中的机制,应该是创建一个窗体对象,根据参数来确定对象的特征1
      

  4.   

    就是调用CreateWindow
    建议F7跟踪一下源代码
    这是我以前跟踪的随手瞎记的,有些乱
    不一定准确
    Application.CreateForm
    TForm.Create(Self)   ==== self 为Application
    CreateNew(AOwner)
    InitInheritedComponent(Self, TForm)
    InitComponent
    InternalReadComponentRes(TForm1)
    FindResource(HInst, PChar(ResName), RT_RCDATA);   ==  ResName为TForm1
    TResourceStream.Create(HInst, ResName, RT_RCDATA)
    调用TResourceStream.ReadComponent(Instance);并赋予Instance
    调用TReader.Create
    Reader.ReadRootComponent
    ReadState(Self);
    调用到TComponent的ReadState
    调用TReader.ReadData
    ReadDataInner
    ReadProperty
    继续TReader.ReadComponent读取子控件
    在子控件SetParent时
    调用TForm的InsertControl
    读取完后,调用TForm.UpdateControlState
    调用UpdateShowing
    返回到TCustomForm.ReadState的
    调用Canvas.TextHeight
    在RequiredState调用Canvas.CreateHandle
    由于Canvas需要调用其宿主窗体的GetDeviceContext取得设备描述表句柄
    然后调用GetDC,GetDC需要窗体的Handle,这时就跳转到HandleNeeded
    这样终于调用了窗体的CreateHandle-CreateWnd-CreateParams
    这样就完成了窗口的创建
      

  5.   

    多谢老达摩、king_dragon参与讨论!