急急急 关于如何把窗口嵌入到panel里。(100分)

M

mlc67

Unregistered / Unconfirmed
GUEST, unregistred user!
我在form1中放了一个panel控件,一个button控件,又生成了一个窗口form2我想把form2嵌入到panel里,
我该如何做,请各位高手请教,急急
 
to mlc67:
这个很简单,你这样试试看。
form2 :=Tform2.Create(nil);
form2.parent :=panel1;
form2.Left :=0;
form2.Top :=0;
form2.show;注意不能用showmodal;
 
首先在工程的选中将 Form2 从 Auto-Create Forms 列表中去掉。
然后如下创建:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2 :=Tform2.Create(panel1);
form2.parent :=panel1;
form2.Left :=0;
form2.Top :=0;
form2.width :=panel1.width;
form2.height :=panel1.height;
form2.visible:=true;
end;
 
我以前也遇到过此类问题而且,基本得到了比较全面的方法!
方法一:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
//在Form2的OnShow事件中加入对Form1的创建,同时指定Form1的parent.并且对
//left,Top,Height,Width赋值,防止其显示超出范围
procedure TForm2.FormShow(Sender: TObject);
begin
Application.CreateForm(TForm1, Form1);
Form1.Parent:=Panel1;
Form1.Left:=2;
Form1.Top:=3;
Form1.Height:=100;
Form1.Width:=150;
Form1.Show;
end;

方法二:
unit weichenggong1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Bevel1: TBevel;
Button1: TButton;
Panel1: TPanel;
Panel2: TPanel;
procedure ShowForm(FormClass: TFormClass; Form: TForm; FPal: TPanel);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses unit2,unit3;

{$R *.DFM}


procedure TForm1.ShowForm(FormClass: TFormClass; Form: TForm; FPal: TPanel); //窗口融合
begin
if Form = nil then
Form := FormClass.Create(nil);
FPal.DockSite := True;
with Form do
begin
DockSite := True;
DragKind := DkDock;
Align := alClient;
HostDockSite := FPal;
Show;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
TForm1.ShowForm(TForm2, Form2, Panel1);
TForm1.ShowForm(TForm3, Form3, Panel2);
end;

end.

还有其他的方法,可以去下面的地方看看:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1046558
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1241687
如果觉得有收获就给点分吧,哥们穷的可怜~!哈……
 
思路:使用movewindow按照panel的大小位置放置form2
 
我的看法在上面。
 
这个问题以前已经讨论过很多,所以只要找来看看基本可以解决你的问题了,所以,如果你
要深入的了解这个问题就按照我上面提供的网址去看看!
 
在同一个工程里做窗口嵌入还是挺容易的。不在同一个工程里就很需要技巧了,想知道吗?:)
 
我想知道楼上的能否把其他的应用程序的窗口嵌到指定的panel中,
如果能解决我出1000分
 
application.CreateForm(Tform2,form2);
form2.Dock(panel_main,BoundsRect);
form2.show;
此种方法也可行。
 
《DELPHI 5开发人员指南》的第四章有这样的例子。
unit ChildFrm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls, Menus;

type

TChildForm = class(TForm)
private
FAsChild: Boolean;
FTempParent: TWinControl;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure Loaded; override;
public
constructor Create(AOwner: TComponent); overload; override;
constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; overload;

// The method below must be overridden to return either the main menu
// of the form, or nil.
function CanChange: Boolean; virtual;
end;

var
ChildForm: TChildForm;

implementation

{$R *.DFM}
constructor TChildForm.Create(AOwner: TComponent);
begin
FAsChild := False;
inherited Create(AOwner);
end;

constructor TChildForm.Create(AOwner: TComponent; AParent: TWinControl);
begin
FAsChild := True;
FTempParent := aParent;
inherited Create(AOwner);
end;

procedure TChildForm.Loaded;
begin
inherited;
if FAsChild then
begin
align := alClient;
BorderStyle := bsNone;
BorderIcons := [];
Parent := FTempParent;
Position := poDefault;
end;
end;

procedure TChildForm.CreateParams(var Params: TCreateParams);
Begin
Inherited CreateParams(Params);
if FAsChild then
Params.Style := Params.Style or WS_CHILD;
end;

function TChildForm.CanChange: Boolean;
begin
Result := True;
end;
end.

把ChildForm 从Auto-create forms中去掉。
implementation
uses ChildFrm;
......
procedure TForm1.Button1Click(Sender: TObject);//嵌在panel1中
begin
if not assigned(ChildForm) then
ChildForm:=TChildForm.Create(application,panel1);
childForm.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);//以普通窗体形式出现
begin
if not assigned(ChildForm) then
ChildForm:=TChildForm.Create(application);
childForm.Show;
end;
 
请看
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1346084
功能强大的停靠控件,可以满足你的停靠要求
 
只要指定parent为panel就可以的。
 
顶部