Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3

Управление вкладками и доступ к их содержимому

08.02.2016, 17:48. Показов 1656. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго!, вопрос таков
Логика программы такова, что может быть открыто множество вкладок. На вкладках всегда один и то тоже набор компонентов, в зависимости от типа открытой вкладки. Все формируется динамически.
И что бы докопаться до любого компонента (к примеру изменить текст в TEdit)на вкладке приходиться делать бубны.Как можно сделать к примеру иметь такую структуру класса
Id класса (это id вкладки)
- TObject 1 (к примеру он у меня будет Edit)
- TObject 2 (к примеру он у меня будет Memo)
- TObject 3 (еще ченить)
- TObject 4
- TObject(n)

Надеюсь понятно объяснил
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2016, 17:48
Ответы с готовыми решениями:

Управление вкладками
Хочу сделать регистрацию и авторизацию пользователя на одной форме. Разграничила вкладками. на одной - авторизация. На другой регистрация....

Управление вкладками
Подскажите, как организовать упраление вкладками в форме т.е. в зависимости от введенных даных в поля формы вкладки отображаются или не...

Управление вкладками через CSS
Добрый день, помогите разобраться с отображением вкладок. Есть две вкладки: Вкладка1 и Вкладка2. В вкладках содержится информация. В...

17
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2016, 17:57
Цитата Сообщение от Dinkin Посмотреть сообщение
На вкладках всегда один и то тоже набор компонентов
Прямой путь к использованию Frame-ов.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.02.2016, 18:05
Если число вкладок постоянно, то можно по их числу создать индексированные общие массивы, которые будут ассоциированы с конкретными объектами при переключении (Tab = Index), например: Memo->Lines->Assign(aStringLists[Index]). Для Label и Edit можно применить aStrings[Index] и т.д.

Добавлено через 2 минуты
Цитата Сообщение от volvo Посмотреть сообщение
Прямой путь к использованию Frame-ов
Не уверен. На каждый фрейм - свои юниты с dfm. А если используется PageControl - лишних файлов можно избежать (ну не люблю я, когда в проекте целый ворох всякого нужного хлама!!)
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 18:06  [ТС]
volvo, Фреймы юзал, с ними не оч комфортно в данном проекте работать, во первых это маштабирование компонентов, во вторых наследование.
У меня и так как Вы раньше назвали проект "Матрешка"
nick42, Вкладок может быть скока угодно
Миниатюры
Управление вкладками и доступ к их содержимому  
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.02.2016, 18:07
Хотя, наверное, с фреймами я погорячился. Можно ведь одним обойтись?

Добавлено через 1 минуту
Цитата Сообщение от Dinkin Посмотреть сообщение
nick42, Вкладок может быть скока угодно
2463 шт. может быть?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2016, 18:07
Цитата Сообщение от nick42 Посмотреть сообщение
ну не люблю я, когда в проекте целый ворох всякого нужного хлама!!
Может, тогда сменить среду разработки? А вообще, это не ненужный хлам, если оно помогает решить задачу.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 18:08  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
2463
нет, думаю макс 20-30 вкладок =)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.02.2016, 18:14
Цитата Сообщение от volvo Посмотреть сообщение
А вообще, это не ненужный хлам, если оно помогает решить задачу.
Я написал "нужного", и на этот раз не опечатался. А в принципе, - тем программирование и привлекательно, что предлагает несколько путей решения задачи.
Я по прежнему за PageControl (или TabControl, который сюда подходит, но мне меньше нравится.).
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 18:17  [ТС]
а у TObject есть какой то постоянный идентификатор, что бы его можно было можно в обычный StringList впихнуть?)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.02.2016, 18:19
А, собственно, почему не базы данных? Их для подобных задач и задумывали... .
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 18:21  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
А, собственно, почему не базы данных?
Да система и так работает сейчас с MsSQL.....
только это столько временных таблиц делать, следить за их очисткой..дополнительные запросы)) потому и спросил может как то это массивочками можно реализовать)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2016, 18:34
Цитата Сообщение от Dinkin Посмотреть сообщение
И что бы докопаться до любого компонента (к примеру изменить текст в TEdit)на вкладке приходиться делать бубны
Можно посмотреть на бубен, который нужен, чтобы на вкладке PC10 записать значение в "Имя ПК"?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 18:40  [ТС]
Мне стыдно, но я сделал оч коряво....суть токова:

При создании вкладки и компонентов на ней.у меня есть "Коронная" кнопка для корой я прописал след код перехватчика

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace SppedButton_SelectIndex
{
    class TsSpeedButton : public Sspeedbutton::TsSpeedButton
    {
    private:
            TObject *FNASLEDIE,*FNASLEDIE1,*FNASLEDIE2,.....;
    public:
        __fastcall virtual TsSpeedButton(System::Classes::TComponent* AOwner)
            : Sspeedbutton::TsSpeedButton(AOwner)
        {
        }
        __property TObject *NASLEDIE  = { read=FNASLEDIE, write=FNASLEDIE};
        __property TObject *NASLEDIE1 = { read=FNASLEDIE1, write=FNASLEDIE1};
        __property TObject *NASLEDIE2 = { read=FNASLEDIE2, write=FNASLEDIE2};
               ....
    };
}
#define TsSpeedButton SppedButton_SelectIndex::TsSpeedButton
и для каждого потом такого объекта привязываю компонент...к примеру NASLEDIE = это поле для ввода имени ПК
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2016, 18:50
"Абалдеть" (С)

А просто унаследоваться от TTabSheet (сколько там типов вкладок у тебя будет? 2? 3?), и при его создании создавать на нем автоматически все нужные компоненты (а указатели на них описать в секции public, чтобы беспроблемно к ним обращаться, когда понадобится) - уже слишком просто?
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 19:27  [ТС]
Пробовал так изначально,но так как использую TsTabSheet, она при удалении выдаёт ошибки,если присваивать что то своё
Это если я Вас правильно понял

Добавлено через 23 минуты
в любом случае спасибо, видимо в който степени были правильны бубны и стоит проработать избежания ошибок у TsTabSheet =)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2016, 20:19
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

Цитата Сообщение от Dinkin Посмотреть сообщение
так как использую TsTabSheet, она при удалении выдаёт ошибки
Ничего не выдает. Смотри (тестировал под BCB6, там у меня установлены Альфы)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class TPCTab : public TsTabSheet
{
public:
    TsLabel *lblComputerName;
    TsEdit *edComputerName;
 
    __fastcall virtual TPCTab(Classes::TComponent* AOwner) : TsTabSheet(AOwner)
    {
        lblComputerName = new TsLabel(this);
        lblComputerName->Parent = this;
 
        lblComputerName->Top = 20;
        lblComputerName->Left = 20;
        lblComputerName->Caption = "Computer name";
 
        edComputerName = new TsEdit(this);
        edComputerName->Parent = this;
 
        edComputerName->Top = 50;
        edComputerName->Left = 20;
        edComputerName->Text = "";
    }
};
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sButton1Click(TObject *Sender) // добавляем новую вкладку
{
    TPCTab *tab = new TPCTab(sPageControl1);
    tab->Caption = "New Tab Sheet";
    tab->PageControl = sPageControl1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sButton2Click(TObject *Sender) // удаляем текущую вкладку
{
    delete sPageControl1->Pages[sPageControl1->ActivePageIndex];
}
Создал 20 вкладок, потом удалял их в разной последовательности. Никаких ошибок не замечено (хотя CodeGuard включил специально со всеми возможными опциями). Скорее всего, ты где-то забыл память освободить, вот и ошибки сыпались. Или наоборот, освобождал неоднократно.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
08.02.2016, 20:58  [ТС]
volvo, спасибо. просто не набил лапу в создании перехвадчиков...и что бы сразу создавать на нем элементы.
Дома проверил, действительно работает и все нормально (на тестовом проекте), завтра на раб еще проверю как ляжет на проект =)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
08.02.2016, 21:14
Это не перехватчик, если что. Просто наследник. А поскольку Pages у TsPageControl-а может хранить любого потомка TTabSheet, то можно создавать несколько таких наследников и любой из них добавлять как вкладку к пейджконтролу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.02.2016, 21:14
Помогаю со студенческими работами здесь

Управление вкладками на другой форме
Всем доброго времени суток! Есть две формы, на обеих формах по две вкладки с одинаковыми именами 1. Форма - 2. Форма - Вопрос! Как...

Управление вкладками в Office VSTO
привет форумчане, пишу сюда, т.к. не смог найти конкретную ветку для VSTO суть моей задачи: есть некая вкладка которую мне нужно...

Управление чужими вкладками SysTabControl32
Доброго времени, уважаемые! Решил попробовать автоматизировать один процесс в компании и столкнулся с трудностями. Есть программа...

Доступ к содержимому Iframe
Ситуация такая: на странице содержится iframe в зависимости от действий пользователя страница в iframe-е может перейти на: -...

Доступ запрещен к содержимому iframe
Собсна с самим доступом проблем нет - задача вобщем-то простая. Проблема такая, что я в свой iframe загружаю некоторую чужую страницу и в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru