Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3

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

08.02.2016, 17:48. Показов 1727. Ответов 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
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 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,154
Записей в блоге: 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
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
08.02.2016, 18:07
Цитата Сообщение от nick42 Посмотреть сообщение
ну не люблю я, когда в проекте целый ворох всякого нужного хлама!!
Может, тогда сменить среду разработки? А вообще, это не ненужный хлам, если оно помогает решить задачу.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 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,154
Записей в блоге: 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,154
Записей в блоге: 3
08.02.2016, 18:21  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
А, собственно, почему не базы данных?
Да система и так работает сейчас с MsSQL.....
только это столько временных таблиц делать, следить за их очисткой..дополнительные запросы)) потому и спросил может как то это массивочками можно реализовать)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
08.02.2016, 18:34
Цитата Сообщение от Dinkin Посмотреть сообщение
И что бы докопаться до любого компонента (к примеру изменить текст в TEdit)на вкладке приходиться делать бубны
Можно посмотреть на бубен, который нужен, чтобы на вкладке PC10 записать значение в "Имя ПК"?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 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
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
08.02.2016, 18:50
"Абалдеть" (С)

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

Добавлено через 23 минуты
в любом случае спасибо, видимо в който степени были правильны бубны и стоит проработать избежания ошибок у TsTabSheet =)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 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,154
Записей в блоге: 3
08.02.2016, 20:58  [ТС]
volvo, спасибо. просто не набил лапу в создании перехвадчиков...и что бы сразу создавать на нем элементы.
Дома проверил, действительно работает и все нормально (на тестовом проекте), завтра на раб еще проверю как ляжет на проект =)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru