application.createform(tform,form);
form.show;

解决方案 »

  1.   

    我的主界面里面有一个TTreeview.上面的子节点存储的是所有子窗体的NAME:string。当然应该用一个方法去调用。ShowForm(FormName: String);
    问题就是怎么样用一个对象的名称去控制对象,请大家一起想想。
      

  2.   

    野火:
      你的那个方法中第二个参数是String型?
      

  3.   

    SetProp(Application.Handle, 'MainFormHandle', Handle);
    SetProp(Application.Handle, 'AboutFormHandle', AboutForm.Handle);var
      AboutFormHandle: THandle;
    begin
      AboutFormHandle := GetProp(Application.Handle, 'AboutFormHandle');
    end;
      

  4.   

    hzlan你说的对,我就是想那样,可一直没有合适的方法。头痛!
      

  5.   

    游少,你的setprop,getprop是什么?我没用过不明白。请详细说一下,OK?
      

  6.   

    如果用窗口句柄,那更好办:
    ShowWindow(Handle);
    UpdateWindow(Handle);
      

  7.   

    童童,showwindow好象只在VB里面支持,delphi里面不支持这个api.
      

  8.   

    我认为用窗体名这种方法是无法实现的,至少也是不稳定、不安全的,因为你无法确定在Windows上运行的其它窗体是否具有相同的名称。
    用窗体名是现有两种办法:
    1。使用API函数枚举窗体,(不安全);
    2。使用CASE OF语句,会累死的。我想不出第三种方法。
    关注
      

  9.   

    其实确切的说不是用窗体名做参数实现的,而是用窗体实例类名做参数实现的。比如有MainFrm,Form1;
    showform(formname:string);而这个Formname := 'TForm1';这样是可以实现。我就是想知道如果用Formname := 'Form1',这样的实现方法?
      

  10.   

    实际上用类名比较好,动态创建啊!
    如果你的子窗口和主窗口都在同一个Project里面的话,很好办:
    节点保存各个子窗口的类名(如:'Tchildform1','Tchildform2'),然后用GetClass或者FindClass得到这个类,然后创建就ok了!
      

  11.   

    yes!vsaber.不过我就是想看看用窗体名是否也能够实现。
      

  12.   

    我是一个外行,我看小某的意思是:
    我现在能提供一个字符串“MyNewForm”如何调用窗体“MyNewForm(Tform)”。
    不知道是不是这样的。
      

  13.   

    Function TMainForm.GetWindows(TitleStr:String):TForm;
    Var
      I:Integer;
    Begin
      Result:=nil;
      If MainForm.MDIChildCount<1 Then Exit;
      For I:=0 To MainForm.MDIChildCount-1 Do
       If UpperCase(MainForm.MDIChild[I].Caption)=UpperCase(TitleStr) Then
         Begin
           Result:=MainForm.MDIChild[I];
           Exit;
         End;
    End;
      

  14.   

    1.首先,注册你的所有的子窗口类。
    2.然后,就可以使用类名创建窗口实例了。这里主要是RTTI的应用。