Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TPageControl, TPanel... [WinXP]


asm_viator ©   (2007-10-10 20:44:00) 

Здравствуйте все!!!
Есть такая проблема: у заказчика разрешение монитора жалкое (~600 x ~800). Поэтому мне надо кое-что учесть (см. далее).
Мне нужно, чтобы можно было переключаться между двумя режимами:
1) две панельки со сплиттером меж ними
2) TPageControl с двумя страницами
Находиться можно только в одном из режимов, то есть видны только панели или виден только TPageControl. При этом мне надо, чтобы все контролы, которые были в первой панели, оказались в первой странице TPageControl, а которые были во второй панели - во второй странице.
А теперь внимание вопрос: как это осуществить?


asm_viator   (2007-10-11 15:24:00) [1]

To Ping
Спасибо за ответ! Идею понял!

У меня интерфейс проги немного другой: там-сям разбросаны TToolBar'ы, TMainMenu и две панели (со сплиттером меж ними):
1) Panel1 с чем-то вроде информации о текущем выбранном объекте (Align=Left)
2) Panel2 (Align=Client), где и требуется разместить либо две панели (Panel3 & Panel4), либо один PageControl1.

Переключение между режимами будет посредством TToolBar

Пробовал делать как в [3], но есть неразрешенная пока проблема (в том же посте)


Ping   (2007-10-11 13:10:00) [2]

Базовая форма:

На ней кнопка Button1 ("Посчитать"). Других контролов нет. Вообще, по идее, контролов вообще не надо, только свойства и методы.


unit BaseFormUnit;

{...}

type
 TBaseForm = class(TForm)
   procedure Button1Click(Sender: TObject);
 private
   FA: integer;
   FB: integer;
   FC: integer;
   procedure DoControlData;
   procedure DoCalculate;
 protected
   procedure BeforeAction; virtual;
   procedure AfterAction; virtual;
 public
   property A: integer read FA write FA;
   property B: integer read FB write FB;
   property C: integer read FC write FC;
 end;

{...}

procedure TBaseForm.AfterAction;
begin
end;

procedure TBaseForm.BeforeAction;
begin
end;

procedure TBaseForm.Button1Click(Sender: TObject);
begin
 BeforeAction;
 DoControlData;
 DoCalculate;
 AfterAction;
end;

procedure TBaseForm.DoCalculate;
begin
 FC := FA div FB;
end;

procedure TBaseForm.DoControlData;
begin
 if (FB = 0) then
   raise Exception.Create('B should not be equial to 0');
end;


Можешь разместить форму в репозиторий.

Порожденная форма:

Размещаешь три поля ввода, Edit1, Edit2, Edit3. К ним - подписи, картиночки, сплиттеры и все, что твоей душе угодно.

unit InheritedFormUnit;

uses
 BaseFormUnit;

type
 TInheritedForm = class(TBaseForm)
 protected
   procedure BeforeAction; override;
   procedure AfterAction; override;
 end;

{...}

procedure TInheritedForm.BeforeAction;
begin
 A := StrToInt(Edit1.Text);
 B := StrToInt(Edit2.Text);
end;

procedure TInheritedForm.AfterAction;
begin
 Edit3.Text := IntToStr(C);
end;


Как-то так...


app   (2007-10-11 11:55:00) [3]

> Правильный Вася  (11.10.2007 10:48:08)  [8]

В Потрепаться


Правильный Вася   (2007-10-11 10:48:00) [4]


> Не путай божий дар с яичницей...

божий дар в твоемописании представляет собой типичную яичницу


asm_viator   (2007-10-11 09:47:00) [5]

Всем спасибо!
Домой приду - попробую!
To Ping
Объясни поподробнее, плиз!


Ping   (2007-10-10 22:36:00) [6]

это называется фрейм TFrame

Не путай божий дар с яичницей...


Правильный Вася   (2007-10-10 22:35:00) [7]


> Ping   (10.10.07 22:04) [4]

это называется фрейм TFrame


Ping   (2007-10-10 22:04:00) [8]

Сделать базовую форму, в которой прописать всю логику представления. И породить от нее две другие формы, в которых разместить контролы так, как надо по условиям. И когда клиент захочет третий вариант, сделать третью форму, разместив на ней контролы в третьем виде.


asm_viator   (2007-10-10 21:35:00) [9]

Ага, понял! Надо сделать TNotebook (Align=Client), сделать ему две страницы, в одной - панели, в др. - TPageControl (кол-во страниц - два).
потом меняем TNotebook.PageIndex, меняем парент у панелек на TPageControl.Pages[n], и готово!

Но...
В TPageControl панели не на всю страницу получаются, а такими, какими были в первом TNotebook.PageIndex


asm_viator   (2007-10-10 21:09:00) [10]


> поменять свойство Parent
> ?

А что? Это идея! Пробую...


Правильный Вася   (2007-10-10 20:59:00) [11]

поменять свойство Parent
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо