Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  136

•  TDictionary Custom Sort  3 318

•  Fast Watermark Sources  3 065

•  3D Designer  4 825

•  Sik Screen Capture  3 321

•  Patch Maker  3 535

•  Айболит (remote control)  3 637

•  ListBox Drag & Drop  2 996

•  Доска для игры Реверси  81 564

•  Графические эффекты  3 927

•  Рисование по маске  3 232

•  Перетаскивание изображений  2 613

•  Canvas Drawing  2 735

•  Рисование Луны  2 561

•  Поворот изображения  2 166

•  Рисование стержней  2 161

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 226

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 215

•  Пазл Numbrix  1 682

•  Заборы и коммивояжеры  2 052

•  Игра HIP  1 279

•  Игра Go (Го)  1 225

•  Симулятор лифта  1 471

•  Программа укладки плитки  1 214

•  Генератор лабиринта  1 542

•  Проверка числового ввода  1 352

•  HEX View  1 490

•  Физический маятник  1 355

 
скрыть


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

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



Delphi Sources

Как работать с формой, куда динамически передаются страницы (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.





Похожие по теме исходники

PageControl

Примеры оформления DBGrid

Аудио Деформатор

Weather Info 2 (информация о погоде)

 

Оптимальное кодирование информации

Рисование математических формул

Информация о процессах




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте