
26.08.2009, 12:30
|
Активный
|
|
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
|
|
Код:
unit FormInPanel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
OldWndProc: Integer;
Form1: TForm1;
F:TForm;
function NewWndProc(hndl: HWND; msg: UINT;
wPrm: WPARAM; lPrm: LPARAM): LRESULT; stdcall;
implementation
{$R *.dfm}
function NewWndProc(hndl: HWND; msg: UINT;
wPrm: WPARAM; lPrm: LPARAM): LRESULT; stdcall;
var
wp: PWindowPos;
begin
if msg = WM_WINDOWPOSCHANGING then
begin
wp := PWindowPos(Pointer(lPrm));
wp^.flags := wp^.flags or SWP_NOMOVE;
lPrm := Integer(wp);
end;
Result := CallWindowProc(Pointer(OldWndProc), F.Handle,
msg, wPrm, lPrm);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
F:=TForm.Create(self);
F.Parent:=panel1;
F.Name:='MyForm1';
F.Caption:='Моя форма';
F.Top:=1; //координата 1
F.Left:=1; //координата 2;
F.Show;// - показ формы
OldWndProc := SetWindowLong(F.Handle, GWL_WNDPROC, Integer(@NewWndProc));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if F <> nil then
begin
SetWindowLong(F.Handle, GWL_WNDPROC, OldWndProc);
F.Free;
end;
Application.Terminate;
end;
end.
Разберетесь?? =)
|