MDI子窗口是DLL封装的

解决方案 »

  1.   

    MDI创建的子窗口的FormStyle有什么限制吗?
      

  2.   

    我的应用程序是这样创建的
      Application.Initialize;
      FrmSplash:=TFrmSplash.Create(Application);
      FrmSplash.ShowModal;
      Application.ProcessMessages;
      Application.CreateForm(TFrmMain, FrmMain);
      FrmSplash.Close;
      FrmSplash.Free;
      Application.Run;请问我在其他窗体中使用Application.MainForm时MainForm是不是就是下面这行代码创建的?
    Application.CreateForm(TFrmMain, FrmMain);
      

  3.   

    我在MDI调用封装的DLL子窗体时,用以下语句安全吗?
    TFrmMain(Application.MainForm).StbMain.Panels[5].Text:='操作员:'+Ds.FieldValues['f_zybm']+' '+Ds.FieldValues['f_zymc'];说明这条语句的意愿是:在DLL子窗体修改MDI主窗体的状态栏
      

  4.   

    是不是就是下面这行代码创建的?
    Application.CreateForm(TFrmMain, FrmMain);
    是的
    上面的语句是不是取值可以,赋值不行,是不是这样的?
    应该是可以赋值的
      

  5.   

    是DLL封装的MDI子窗口可以模态化显示已经实现,FormStyle除了MDI外,什么样式都是可以的,
    Application第一次调用类似语句Application.CreateForm便是主窗口,可以用Application.MainForm调用,上面两条语句取值可以,赋值是不行的,如有赋值,应用程序退出后会有存取异常的错误好了,一切问题都澄清,现在还有一个问题
    ■如何让MDI子窗体的查询进度条在主窗口显示■ 
    http://community.csdn.net/Expert/topic/3828/3828720.xml?temp=.6812403procedure 子窗体.ExecuteQuery(aTableName:string);     //执行查询
    var
        ProgressBar: TProgressBar;
        ...
    begin
        ...
            ProgressBar:=TProgressBar.Create(nil);
            with ProgressBar do
            begin
                ...
                Parent:=?;///////////////////////////////这里怎么写?
                Visible:=True;
                Min:=0;
                Max:=Ds.RecordCount;
                Step:=1;
            end;
    ...
    Parent怎么写成主窗体的栏态栏?最后求救!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1谢谢
      

  6.   

    用 windows.SetParent 試下
      

  7.   

    procedure TForm.ExecuteQuery();     //执行查询
    var
        SetPosition:procedure(aPos:Integer;aMax:Integer=0;aStep:Integer=100);
    begin
    @SetPosition:=GetProcAddress(GetModuleHandle(pchar(application.Exename)), 'SetPosition');
    ...
    if Assigned(SetPosition) then SetPosition(0,Ds.RecordCount);
    ...
    While Not Ds.EOF do
    begin
    if Assigned(SetPosition) then SetPosition(j);
    ...
    Ds.Next;
    end;
    if Assigned(SetPosition) then SetPosition(0);-----------------------
    主窗体
    procedure SetPosition(aPos:Integer;aMax:Integer=0;aStep:Integer=100);
    begin
        FrmMain.FProgressBar.Visible:=True;
        FrmMain.StbMain.Panels[4].Style:=psOwnerDraw;
        FrmMain.StbMain.Panels[4].Bevel:=pbNone;
        FrmMain.FPos:=aPos;
        if aMax<>0 then FrmMain.FMax:=aMax;
        if (aPos mod aStep)=0 then FrmMain.StbMain.Repaint;
    end;exports
        SetPosition;