Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: TabControl и PageControl  (Прочитано 34451 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Emerald
Помогающий

ru
Offline Offline
Пол: Мужской
Карлсончик!! Дорогой!


« : 10-11-2006 10:07 » 

Помогите разобраться, что для чего нужно. Как я понимаю, TabControl - это несколько закладок с одинаковым элементами, а PageControl - с разным. А если мне нужно несколько закладок с одинаковыми элементами, но чтоб значения у них у всех были разные и создавались динамически, то что выбрать?

В этой теме: https://forum.shelek.ru/index.php/topic,6735.0.html рассказывают, как создавать их по ходу работы, только я не понял как мне, например получить значения из полей, которые так создаются, у них же нет имени
Записан

А мы тут, знаете, всё плюшками балуемся
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 10-11-2006 10:24 » new

TabControl - это один объект (компонент). Его "страницы" - это просто отрисовка, реально там всего одна страница, и каждый раз, когда юзер эти страницы переключает - обновить их содержимое - забота разработчика.

PageControl - это контейнер, компонент, содержащий в себе другие компоненты - страницы (TTabSheet). когда переключается страница, содержимое следующей показывается само, "оно там уже есть". для доступа к индивидуальной странице у него имеется свойство Pages (например,
Код:
with Pages [0] do begin
- это работа с первой страницей, не важно, как она называется), для определение общего количества страниц есть свойство PageCount. Для переключения страницы используется ActivePageIndex := 1 (делаем активной вторую страницу) или ActivePage := TabSheet1 (делаем активной страницу, у которой name = 'TabSheet1').
« Последнее редактирование: 13-12-2007 20:50 от Алексей1153++ » Записан

Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-11-2006 10:58 » 

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    TabControl1: TTabControl;
    Edit1: TEdit;
    procedure TabControl1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TabControl1Change(Sender: TObject);
begin
 Case TabControl1.TabIndex of
  0: Edit1.Text := '1';
  1: Edit1.Text := '2';
  2: Edit1.Text := '3';
  3: Edit1.Text := '4';
 end;
end;

end.

Так-же значения можно "подгружать" из INI-шки или реестра.
« Последнее редактирование: 13-12-2007 20:51 от Алексей1153++ » Записан

С уважением, Oldy.
Emerald
Помогающий

ru
Offline Offline
Пол: Мужской
Карлсончик!! Дорогой!


« Ответ #3 : 10-11-2006 11:20 » 

x77, как работать со страницей понятно. а если на странице с номером х есть RichEdit, который создается динамически, то как мне записать/прочитать из него.
Oldy, а если у меня в RichEdit-е большой текс, то как мне поступать? Каждый раз при переключении его сохранять и показывать новый для каждой вкладки?
Записан

А мы тут, знаете, всё плюшками балуемся
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #4 : 10-11-2006 11:27 » 

Emerald, По первому вопросу, см. функцию FindComponent
по-второму: да. Компонент TabControl, это просто отображение закладок и ничего больше. PageControl - это набор "страниц" (на которых могут размещаться другие компоненты)
Записан

Удачного всем кодинга! -=x[PooH]x=-
Emerald
Помогающий

ru
Offline Offline
Пол: Мужской
Карлсончик!! Дорогой!


« Ответ #5 : 10-11-2006 11:52 » 

PooH, не пойму. FindComponent ищет по имени компонента, а как она его найдет если он создается на n-ной вкладке и без имени. Или при создании RichEdit-a в процедурах ему нужно присваивать свой идентификатор? типа
Код:
for i:=0 to 10 do
  TRichEdit.Create(Self).Name:='RichEdit'+IntToStr(i);
и затем обращаться уже напрямую (?)
Код:
RichEdit4.Lines.Add('tratata');
« Последнее редактирование: 13-12-2007 20:51 от Алексей1153++ » Записан

А мы тут, знаете, всё плюшками балуемся
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #6 : 10-11-2006 11:57 » 

Да, проще всего назначить имя, а потом
Код:
with (FindComponent(name) as TRichEdit) do Lines.Add('tratata')

Можно и без имени, но это геморойней.
« Последнее редактирование: 13-12-2007 20:52 от Алексей1153++ » Записан

Удачного всем кодинга! -=x[PooH]x=-
Emerald
Помогающий

ru
Offline Offline
Пол: Мужской
Карлсончик!! Дорогой!


« Ответ #7 : 10-11-2006 12:00 » 

а FindComponent работает для всей формы или можно ему как-либо указать, что компонент находится на PageControl-e?
« Последнее редактирование: 10-11-2006 12:02 от Emerald » Записан

А мы тут, знаете, всё плюшками балуемся
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #8 : 10-11-2006 12:03 » 

да, для всей формы.

можно еще помудрить в массивом TabSheet.Controls или Components, сейчас попробуем нарыть...

вот: получение имени класса первого контроля на второй странице.
Код:
ShowMessage(PageControl1.Pages[1].Controls[0].ClassName);
« Последнее редактирование: 10-11-2006 12:13 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Emerald
Помогающий

ru
Offline Offline
Пол: Мужской
Карлсончик!! Дорогой!


« Ответ #9 : 10-11-2006 12:21 » 

бр-бр-бр. Уж лучше тогда присвоить имя при создании.

Вроде разобрался. Всем спасибо за участие
Записан

А мы тут, знаете, всё плюшками балуемся
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines