请教问题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....并且都要求为动态创建的子窗口。如何让每个子窗口显示后只占主窗口除菜单栏,工具栏和下面状态栏之外的大小和客户区位置,并且当最大化后,只能覆盖到主窗口工具栏到下面的状态栏之间的位置。然后就是当主窗口缩小后,子窗口自动缩小到相应的比例。当点击子窗口关闭按钮后,关闭释放子窗口。重复点击显示子窗口时,判断这个子窗口是否已显示,是否已最小后,然后如果没有,就重新显示,如果有,就把最小化的子窗口显示出来。谢谢大家。
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....并且都要求为动态创建的子窗口。如何让每个子窗口显示后只占主窗口除菜单栏,工具栏和下面状态栏之外的大小和客户区位置,并且当最大化后,只能覆盖到主窗口工具栏到下面的状态栏之间的位置。然后就是当主窗口缩小后,子窗口自动缩小到相应的比例。当点击子窗口关闭按钮后,关闭释放子窗口。重复点击显示子窗口时,判断这个子窗口是否已显示,是否已最小后,然后如果没有,就重新显示,如果有,就把最小化的子窗口显示出来。谢谢大家。
TForm.create(nil) ; //需要自己手动释放
TForm.create(self); //由当前窗体(即Self)释放
TForm.create(Application); //由程序自动处理释放问题
2.
先建立一个pagecontrol控件.然后设置好tabsheet内容,往后的tabsheet[i]都是由tabsheet创建的就行
如何知道当前操作的是哪个tabsheet的话,可以加个判断3.
有点乱.没时间看了,要去吃饭...
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皮肤控件。