Показать сообщение отдельно
  #9  
Старый 26.08.2009, 12:30
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 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.

Разберетесь?? =)
Ответить с цитированием