Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: декабрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Как работать с формой, куда динамически передаются страницы

Автор: 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.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS