Type TMovablePanel = Class(TPanel)
Private
Procedure wmNCHitTest(Var Message : TWMNCHitTest); message WM_NCHITTEST;
Protected
Procedure MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer); override;
End;
Procedure TMovablePanel.wmNCHitTest(Var Message : TWMNCHitTest);
Begin
With Message, ScreenToClient(Pos) Do
If (X < Width - 10) And (Y < Height - 10) Then
Message.Result := HTCAPTION
Else Message.Result := HTCLIENT;
End;
Procedure TMovablePanel.MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
Begin
If Button = mbLeft Then Begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_SIZE + HTBOTTOMRIGHT - 9, 0);
End Else Inherited MouseDown(Button, SHift, X, Y);
End;
– Robert Wittig
Как работать с формой, куда динамически передаются страницы (PageControl) из форм-хранителей (с использованием наследования)?
Nomadic советует:
Кидаю проект-болванку, сделанную перед началом работы над основным -
unit Unit1; //базовая форма хранителя страницы
interface
uses ...
type TBPgFrm = class(TForm)
Panel1: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Label1: TLabel;
public
function PgInit: boolean; virtual;
function PgValid: boolean; virtual;
end;
implementation
{$R *.DFM}
function TBPgFrm.PgInit: boolean;
begin
result:= MessageDlg(Label1.Caption+': PgInit', mtConfirmation, mbOkCancel, 0)=mrOK;
end;
function TBPgFrm.PgValid: boolean;
begin
result:= MessageDlg(Label1.Caption+': PgValid', mtConfirmation, mbOkCancel, 0)=mrOK;
end;
end.
unit Unit2; //главная форма проекта; содержит первую страницу
interface //и кнопки Cancel, Prev & Next/Finish.
uses ...
type TPagesDlg = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Prev: TButton;
CancelBtn: TButton;
Next: TButton;
Label1: TLabel;
procedure CancelBtnClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure NextClick(Sender: TObject);
procedure PrevClick(Sender: TObject);
privateFrms: TList;
procedure AddForms;
end;
var PagesDlg: TPagesDlg;
implementation
uses Unit1, Unit3, Unit4, Unit5;
{$R *.DFM}
procedure TPagesDlg.AddForms; //размещение динамических страниц
var i: word;
begin
Frms:= TList.Create;
Frms.Add(TBPgFrm1.Create(Self));
Frms.Add(TBPgFrm2.Create(Self));
for i:= 0 to 1 do TBPgFrm(Frms[i]).TabSheet1.PageControl := PageControl1
end;
procedure TPagesDlg.CancelBtnClick(Sender: TObject);
begin
Close;
end;
procedure TPagesDlg.FormDestroy(Sender: TObject);
var i: word;
begin
for i:= Frms.Count-1 downto 0 do TBPgFrm(Frms[i]).Free;
Frms.Free;
end;
procedure TPagesDlg.NextClick(Sender: TObject);
var
i: word;
vi: Boolean;
begin
Next.Enabled:= false;
if PageControl1.PageCount=1 then AddForms;