скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Как работать с формой, куда динамически передаются страницы (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);
  private
    Frms: 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;
  i := PageControl1.ActivePage.PageIndex;
  if i = 0 then
    vi := true
  else
    vi := TBPgFrm(Frms[i - 1]).PgValid;
  if vi then
    with PageControl1 do
      if i = PageCount - 1 then
      begin
        CancelBtnClick(Sender);
        exit;
      end
      else
      begin
        ActivePage := FindNextPage(ActivePage, True, false);
        if ActivePage.PageIndex = PageCount - 1 then
          Next.Caption := 'Finish';
        Prev.Enabled := true;
        if TBPgFrm(Frms[i]).PgInit then
          Next.Enabled := true
        else
          PrevClick(Sender);
      end
    else
      Next.Enabled := true;
end;

procedure TPagesDlg.PrevClick(Sender: TObject);
begin

  Prev.Enabled := false;
  with PageControl1 do
  begin
    ActivePage := FindNextPage(ActivePage, false, false);
    Prev.Enabled := ActivePage.PageIndex > 0;
  end;
  Next.Caption := 'Next';
  Next.Enabled := true;
end;

end.

// *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

unit Unit3; //наследник с RadioGroup.
interface
uses...
type

  TBPgFrm3 = class(TBPgFrm)
    RadioValid: TRadioGroup;
  public
    function PgValid: boolean; override;
  end;

implementation

{$R *.DFM}

function TBPgFrm3.PgValid: boolean;
begin

  result := RadioValid.ItemIndex = 0;
end;

end.

// *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

unit Unit4; // наследник с CheckBox.
interface
uses...
type

  TBPgFrm2 = class(TBPgFrm)
    CheckValid: TCheckBox;
  public
    function PgValid: boolean; override;
  end;

implementation

{$R *.DFM}

function TBPgFrm2.PgValid: boolean;
begin

  result := CheckValid.Checked;
end;

end.


В Delphi 4 появились новые возможности, в частности, возможность докинга визуальных компонент, в частности, форм, на различные DockSite, в том числе и на TPageControl. Это более удобно. Кроме того, Вы имеете возможность использования TFormLoader из библиотеки VG Library.






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook