Begin
With Message,ScreenToClient(Pos) Do
If(X < Width - 10) And(Y < Height - 10) Then
Message.Result := HTCAPTION
Else Message.Result := HTCLIENT;
End;
ProcedureTMovablePanel.MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
Begin
IfButton = mbLeft Then Begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_SIZE + HTBOTTOMRIGHT - 9, 0);
End Else InheritedMouseDown(Button, SHift, X, Y);
End;
– Robert Wittig
Как работать с формой, куда динамически передаются страницы (PageControl) из форм-хранителей (с использованием наследования)?
Nomadicсоветует:
Кидаю проект-болванку, сделанную перед началом работы над основным -
unitUnit1; //базовая форма хранителя страницы
interface
uses ...
typeTBPgFrm = class(TForm)
Panel1: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Label1: TLabel;
public
functionPgInit: boolean; virtual;
functionPgValid: boolean; virtual;
end;
implementation
{$R *.DFM}
functionTBPgFrm.PgInit: boolean;
begin
result:= MessageDlg(Label1.Caption+': PgInit', mtConfirmation, mbOkCancel, 0)=mrOK;
end;
functionTBPgFrm.PgValid: boolean;
begin
result:= MessageDlg(Label1.Caption+': PgValid', mtConfirmation, mbOkCancel, 0)=mrOK;
end;
end.
unitUnit2; //главная форма проекта; содержит первую страницу
interface//и кнопки Cancel, Prev & Next/Finish.
uses ...
typeTPagesDlg = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Prev: TButton;
CancelBtn: TButton;
Next: TButton;
Label1: TLabel;
procedureCancelBtnClick(Sender: TObject);
procedureFormDestroy(Sender: TObject);
procedureNextClick(Sender: TObject);
procedurePrevClick(Sender: TObject);
privateFrms: TList;
procedureAddForms;
end;
varPagesDlg: TPagesDlg;
implementation
usesUnit1, Unit3, Unit4, Unit5;
{$R *.DFM}
procedureTPagesDlg.AddForms; //размещение динамических страниц
vari: word;
begin
Frms:= TList.Create;
Frms.Add(TBPgFrm1.Create(Self));
Frms.Add(TBPgFrm2.Create(Self));
fori:= 0 to1 doTBPgFrm(Frms[i]).TabSheet1.PageControl := PageControl1
end;
procedureTPagesDlg.CancelBtnClick(Sender: TObject);
begin
Close;
end;
procedureTPagesDlg.FormDestroy(Sender: TObject);
vari: word;
begin
fori:= Frms.Count-1 downto0 doTBPgFrm(Frms[i]).Free;
Frms.Free;
end;
procedureTPagesDlg.NextClick(Sender: TObject);
var
i: word;
vi: Boolean;
begin
Next.Enabled:= false;
ifPageControl1.PageCount=1 thenAddForms;
i:= PageControl1.ActivePage.PageIndex;
ifi=0 thenvi:= true
elsevi:= TBPgFrm(Frms[i-1]).PgValid;
ifvi then
withPageControl1 do
ifi=PageCount-1 then begin
CancelBtnClick(Sender);
exit;
end else begin
ActivePage:= FindNextPage(ActivePage, True, false);
ifActivePage.PageIndex=PageCount-1 thenNext.Caption:= 'Finish';
Prev.Enabled:= true;
ifTBPgFrm(Frms[i]).PgInit thenNext.Enabled:= true
elsePrevClick(Sender);
end elseNext.Enabled:= true;
end;
procedureTPagesDlg.PrevClick(Sender: TObject);
begin
Prev.Enabled:= false;
withPageControl1 do begin
ActivePage:= FindNextPage(ActivePage, false, false);
Prev.Enabled:= ActivePage.PageIndex>0;
end;
Next.Caption:= 'Next';
Next.Enabled:= true;
end;
end.
unitUnit3; //наследник с RadioGroup.
interface
uses...
type TBPgFrm3 = class(TBPgFrm)
RadioValid: TRadioGroup;
public
functionPgValid: boolean; override;
end;
implementation
{$R *.DFM}
functionTBPgFrm3.PgValid: boolean;
begin
result:= RadioValid.ItemIndex=0;
end;
end.
unitUnit4; // наследник с CheckBox.
interface
uses...
Читать дальше