请教问题1:一个基于主窗口动态创建的子窗口form2,在生成显示窗口时,到底用Create(nil),Create(self),Create(Application)哪个好?procedure TForm1.Button1.OnClick(Sender:TObject);
var
 f:TForm2;
begin
 f:=TForm2.Create('这里到底用什么好呢???');
 f.ShowModal;
 f.Free;
end;procedure TForm2.Button1.Onclick(Sender:Tobject);
begin
 Close;
end;
请教问题2:如何做一个动态创建PageControl.TabSheet的程序,每一个TabSheet上有一个关闭按钮,点击后可关闭当前TabSheet.像firefox浏览器那样的。假设TabSheet都是动态创建的话,那么如何知道当前操作的是哪个TabSheet的Edit控件。
请教问题3:如何做一个多窗口的mdi程序,主窗口是form1,其它的各子窗口分别为form2,form3....并且都要求为动态创建的子窗口。如何让每个子窗口显示后只占主窗口除菜单栏,工具栏和下面状态栏之外的大小和客户区位置,并且当最大化后,只能覆盖到主窗口工具栏到下面的状态栏之间的位置。然后就是当主窗口缩小后,子窗口自动缩小到相应的比例。当点击子窗口关闭按钮后,关闭释放子窗口。重复点击显示子窗口时,判断这个子窗口是否已显示,是否已最小后,然后如果没有,就重新显示,如果有,就把最小化的子窗口显示出来。谢谢大家。

解决方案 »

  1.   

    1:
    TForm.create(nil) ;       //需要自己手动释放   
    TForm.create(self); //由当前窗体(即Self)释放   
    TForm.create(Application);    //由程序自动处理释放问题   
    2.
    先建立一个pagecontrol控件.然后设置好tabsheet内容,往后的tabsheet[i]都是由tabsheet创建的就行
    如何知道当前操作的是哪个tabsheet的话,可以加个判断3.
    有点乱.没时间看了,要去吃饭...
      

  2.   


    unit UnitMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, sPageControl, StdCtrls, sButton, sListView, sRichEdit,
      sSkinProvider, sSkinManager, Menus, sStatusBar, ExtCtrls, sPanel, sComboBox,
      sEdit;type
      TForm1 = class(TForm)
        sButton1: TsButton;
        sPageControl1: TsPageControl;
        sTabSheet1: TsTabSheet;
        sListView1: TsListView;
        PM1: TPopupMenu;
        N1: TMenuItem;
        sSkinManager1: TsSkinManager;
        sSkinProvider1: TsSkinProvider;
        sStatusBar1: TsStatusBar;
        sPanel1: TsPanel;
        sRichEdit1: TsRichEdit;
        sEdit1: TsEdit;
        sEdit2: TsEdit;
        sEdit3: TsEdit;
        sEdit4: TsEdit;
        sButton2: TsButton;
        CB1: TsComboBox;
        procedure sButton1Click(Sender: TObject);
        procedure sPageControl1CloseBtnClick(Sender: TComponent; TabIndex: Integer;
          var CanClose: Boolean; var Action: TacCloseAction);
        procedure FormCreate(Sender: TObject);
        procedure N1Click(Sender: TObject);
        procedure sPageControl1Change(Sender: TObject);
      private
        LV:array[0..30] of TsListView;
        tts:TsTabsheet;
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      i:Integer;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    i:=0;
    end;procedure TForm1.N1Click(Sender: TObject);
    begin
    if sPageControl1.ActivePageIndex=0 then  ShowMessage(sListView1.Name) else
    ShowMessage(LV[sPageControl1.ActivePageIndex].Name);
    end;procedure TForm1.sButton1Click(Sender: TObject);
    begin
    i:=i+1;
    tts:=TsTabSheet.Create(self);
    tts.PageControl:=sPagecontrol1;
    lv[i]:=TsListView.Create(Self);
    LV[i].Name:=Format('lV%d',[i]);
    LV[i].Parent:=sPageControl1.Pages[i];
    LV[i].Align:=alClient;
    lv[i].ViewStyle:=vsReport;
    LV[i].GridLines:=True;
    LV[i].Columns:=sListView1.Columns;
    LV[i].PopupMenu:=PM1;
    tts.Caption:=Format('TabSheet%d  ',[sPageControl1.PageCount]);
    sPageControl1.ActivePage:=tts;end;procedure TForm1.sPageControl1Change(Sender: TObject);
    begin
    sStatusBar1.Panels[1].Text:=sPageControl1.ActivePage.Caption;
    end;procedure TForm1.sPageControl1CloseBtnClick(Sender: TComponent;
      TabIndex: Integer; var CanClose: Boolean; var Action: TacCloseAction);
    begin
    CanClose := MessageDlg('Close ' + sPageControl1.Pages[TabIndex].Caption + '?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
    end;end.第二个问题我以前做过练习,楼主可以看看。代码有点乱,用了AlphaControls皮肤控件。
      

  3.   

    如何控制一个动态创建的mdi子窗口form2的显示位置和大小,使他只显示在父窗口form1的客户区。当form1客户区的大小改变时,他也自动跟着绽放。