Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110

Работа с динамически созданными объекта на PageControl

06.06.2011, 10:49. Показов 4022. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. На форме есть PageControl, в нем по ходу работы программы динамически создается RichEdit, все хорошо, вот только не знаю как работать с этим с этим динамически созданным RichEdot'ом. К примеру: активизируется какая-либо вкладка (они тоже создаются динамически), а в ней уже динамически создан RichEdit, и нужно получить текст из него ... Подскажите пожалуйста, как можно это организовать?
Вот код динамчиеского создания вкладок и RichEdit:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::CreateNewClick(TObject *Sender)
{
TTabSheet *NewTabSheet = new TTabSheet(PageControl1);
NewTabSheet->PageControl = PageControl1;
NewTabSheet->Caption = "new.script";
 
TRichEdit *RE1 = new TRichEdit(NewTabSheet);
RE1->Parent = NewTabSheet;
RE1->Height = NewTabSheet->Height;
RE1->Width = NewTabSheet->Width;
}
Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2011, 10:49
Ответы с готовыми решениями:

Работа с динамически созданными объектами
У меня динамически создаются Label со своими значениями Caption Также ставится событие Lb->OnClick = btpclick; Вопрос в том как...

Работа с динамически созданными обьектами
Конкретно нужно создать один обьект(TCppWebBrowser) и указать его родителем другой обьект который был так же создан динамически например...

Работа с динамически созданными компонентами
Добрый вечер. Подскажите, при нажатии на батон у меня создаются батон и 4 эдита, они хранятся в массиве записей, мне нужно, чтоб при...

21
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2011, 16:52
Лучший ответ Сообщение было отмечено как решение

Решение

Вариантов масса:

1 вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// в обработчике формы OnCreate
TList *ListRichEdits = new TList();
 
void __fastcall TForm1::CreateNewClick(TObject *Sender)
{
TTabSheet *NewTabSheet = new TTabSheet(PageControl1);
NewTabSheet->PageControl = PageControl1;
NewTabSheet->Caption = "new.script";
 
TRichEdit *RE1 = new TRichEdit(NewTabSheet);
RE1->Parent = NewTabSheet;
RE1->Height = NewTabSheet->Height;
RE1->Width = NewTabSheet->Width;
 
ListRichEdits->Add(RE1);
}
 
// i - индекс от 0 до ListRichEdits->Count-1
TRichEdit *RE1 = (TRichEdit *)ListRichEdits->Items[i];
 
// не забыть удалить ListRichEdits
2 вариант давать уникальные имена и потом находить объект по имени
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TRichEdit *RE1 = new TRichEdit(NewTabSheet);
static int iUnique = 0;
// имя не должно повторяться, и не должно содержать пробелов и спец.символов
RE1->Name = "RE_" + AnsiString(RE1);
RE1->Parent = NewTabSheet;
RE1->Height = NewTabSheet->Height;
RE1->Width = NewTabSheet->Width;
 
// добавляем этот компонент в список компонентов формы, чтобы можно было найти
this->InsertComponent(RE1);
 
// теперь мы можем в любое время найти этот объект по имени
TComponent *FComp = this->FindComponent("RE_0");
if (FComp) {
      TRichEdit *FRichEdit = dynamic_cast<TRichEdit *>(FComp);
      if (FRichEdit) {
                 // работаем с компонентом
      }
}
3 вариант
Зная, что на вкладке только один RichEdit
Пример: получаем указатель на RichEdit в активной вкладке,
но это при условии, что на вкладке ТОЛЬКО ОН!
C++
1
2
3
4
5
6
7
TControl *ControlRich = PageControl1->ActivePage->Controls[0];
if (ControlRich) {
      TRichEdit *FRichEdit = dynamic_cast<TRichEdit *>(ControlRich);
      if (FRichEdit) {
                 // работаем с компонентом
      }
}
3
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
06.06.2011, 18:24  [ТС]
Maluda спасибо огромное!
Возник еще один вопрос. Определяю активный RichEdit так:
C++
1
2
3
4
5
6
7
8
9
TRichEdit *RichEdit;
TList *ListRichEdits = new TList();
 
...
 
void __fastcall TForm1::PageControl1Change(TObject *Sender)
{
RichEdit = (TRichEdit *)ListRichEdits->Items[PageControl1->ActivePageIndex];
}
вот по длине всего Unit1.cpp я могу обращаться к RichEdit но уже начиная со вторго и далее UnitN.cpp я не могу его использовать ... подскажите пожалуйста как можно использовать этот RichEdit? Заранее спасибо!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.06.2011, 18:35
в UnitN.cpp #include "Unit1.h"
C++
1
Form1->RichEdit...
1
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
06.06.2011, 18:39  [ТС]
в UnitN.cpp #include "Unit1.cpp"
Делая так компилятор выдает ошибки о том что данные повторно объявляются ... типа так:
[C++ Error] Unit1.cpp(15): E2238 Multiple declaration for 'BLuaSyntax'
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.06.2011, 18:47
"Unit1.h", см. вышее...
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
06.06.2011, 19:15  [ТС]
Прошу прошенья, перепутал. Однако у меня все написано в Unit1.cpp попробовал перенести в .h в класс не получилось ... сейчас вынес в глобальную переменную, вроде получилось.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2011, 19:27
Byurrer, уж не Луа скрипты собрался редактировать ?
1
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
06.06.2011, 19:32  [ТС]
Maluda да луа скрипты, а точнее для редактирования/написания скриптов для Сталкер. Подсветку синтаксиса как луа так и 2 классов скриптовой базы сделал ... терь улучшаю.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2011, 19:52
Byurrer, я сам занимаюсь в этой сфере и должен тебе сказать, что есть гораздо более крутое решение.

1. Качаешь TMS Components 6.0.0.4 (Только не ниже версию)
2. Он устанавливается автоматом.
3. После этого выкидываешь свои РичЕдиты нафиг.
4. Добавляешь на форму TAdvMemo
5. Добавляешь TAdvPascalMemoStyler (этот компонент делает у твоего Мемо подсветку)
6. Меняешь ключевые слова в TAdvPascalMemoStyler на ключевые слова Луа (можно их передрать в Notepad++ - они уже там по полочкам разложены), добавляешь свои и т.д.
7. В TAdvPascalMemoStyler находишь свойство AutoCompletion - это самый обычный TStrings - добавляешь в него методы и операторы. После того, как добавишь, по комбинации Ctrl+пробел у тебя будет вылазить подсказка кода, как в Билдере.
8. Находишь свойство AutoHint, ставишь его в true и у тебя будет всплывающая подсказка.
9. В общем есть конкретный пример в этом пакете, правда он Делфи. После того, как разберёшься,
будешь просто в восторге!

В общем, у меня в Луа редакторе работает подсветка кода, всплывающие подсказки методов,
точки останова, подсветка начала-конца функций, начала-конца условий и т.д.
Все ключевые слова выделены отдельными цветами.

Добавлено через 1 минуту
Да, забыл добавить, у TAdvMemo есть крутое свойство - MemoSource, то есть тебе не надо на форму кидать 5,10 и т.д. компонентов, а ты просто меняешь это свойство (оно типа TStrings)
2
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
06.06.2011, 19:58  [ТС]
Maluda спасибо за совет, посмотрю, пороюсь на эту тему, однако хочу доделать на RichEdit'ax так как много времени и сил туда положил, одна подсветка синтаксиса в "режиме реального времени" (как то так) заняла очень много времени. Хотя если эта "овчинка стоит выделки" ... а можно посмотреть твой редактор, хотяб несколько скринов если нельзя бинарник?
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2011, 20:01
Byurrer, проект на работе, свои скрины я выложу завтра, а я тебе постараюсь сейчас найти скрин этого компонента.

Добавлено через 1 минуту
Вот у меня всё это работает только для луа
Миниатюры
Работа с динамически созданными объекта на PageControl  
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
06.06.2011, 20:04  [ТС]
Maluda отлично! Буду ждать. Если будет интересно, работы мне с редактором осталось не так много, как доделаю могу сообщить.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2011, 20:08
Просто тут админы ругаются, когда ссылки на сторонние сайты выкладывают, но я думаю, что ты у Гугля их спокойно найдёшь. Там ещё куча фоток есть подробных про этот компонент

Добавлено через 3 минуты
Кстати по подсветке никакого особого кода нет - это всё там уже автоматом работает!
Просто берёшь и редактируешь сами свойства компонента
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
07.06.2011, 13:38
Byurrer, вот сделал тебе скрины своего редактора
Вложения
Тип файла: rar MLC.rar (774.0 Кб, 24 просмотров)
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
07.06.2011, 13:47  [ТС]
Maluda хорошо смотрится . Появилось еще несколько идей по поводу редактора, а вот когда ты (судя по скрину MLC_2) ввел "i" и там появилась подсказка возможных вариантов написания, как можно такое сделать?

Добавлено через 1 минуту
И если будет не трудно, сообщи пожалуйста как выйдет твой редактор
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
07.06.2011, 14:08
Byurrer, в тех компонентах, которые я тебе написал, это уже всё АВТОМАТОМ.
Просто качаешь их, ставишь, разбираешься как они работают и всё!!!
Единственное, я добавил ещё свои методы. Это опять же прямо в настройках этих компонентов.
Однозначно советую их юзать!


Цитата Сообщение от Byurrer Посмотреть сообщение
И если будет не трудно, сообщи пожалуйста как выйдет твой редактор
На самом деле - это не редактор, а Rad Studio для Луа. То есть всё также как в Билдере,
только на Луа. То есть можно делать GUI на Луа или встраивать их в своё приложение. Он уже работает, но пока что в бета версии.
1
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
07.06.2011, 14:13  [ТС]
На самом деле - это не редактор, а Rad Studio для Луа. То есть всё также как в Билдере,
только на Луа. То есть можно делать GUI на Луа или встраивать их в своё приложение. Он уже работает, но пока что в бета версии.
Ясно. На счет компонентов это бесспорно, заюзаю.
P.S. У меня копцепция создания редактора Луа+Сталкер, то есть помимо самого луа (там не все экспортировано) еще и методы этой скриптовой базы.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
07.06.2011, 14:19
Цитата Сообщение от Byurrer Посмотреть сообщение
еще и методы этой скриптовой базы.
Эти методы просто элементарно можно добавить как группу подсветки, назначить ей свой цвет, шрифт и т.д. Добавить в подсказки. Просто за несколько кликов мышки

Вот ещё фотки на эту тему, как это выглядит в редакторе
Вложения
Тип файла: rar LuaStyler.rar (130.0 Кб, 20 просмотров)
1
0 / 0 / 0
Регистрация: 05.04.2015
Сообщений: 2
20.06.2017, 14:19
Добрый день, Maluda ! Спасибо за сообщение от 06.06.2011, 19:52.

У меня проект по анализу алгоритмов с управлением
Lua-скриптами. Написан редактор с подсветкой etc на RichEdit,
но TAdvMemo лучше, наверное, будет!

У меня С++Builder 6 и он меня вполне устраивает. Последние разработки
TMS исключают Builder 6. Есть что-либо для Builder 6 и где взять?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2017, 14:19
Помогаю со студенческими работами здесь

Работа с с динамически созданными элементами
Здравствуйте, не могу разобратся с манипулированием созданных элементов.При создании нового элемента не могу посмотреть его свойств.Пример:...

Работа с динамически созданными объектами
День добрый. С Новым годом всех! Интересует следующее: 1. На первой форме кнопка, по нажатию на которой открывается 2 форма)) На...

Работа с динамически созданными объектами
как узнать какой объект подал сообщение на выполнение события. Возможно я выразился кучерявенько но смысл такой: есть скажем 10 динамически...

Работа с динамически созданными объектами: удаление
Как удалять созданные объекты. И еще немного не по теме, но ... как определить тип хранимый в object. Спасибо.

Управление динамически созданными объектами
Ситуация: у меня создается динамически несколько объектов TLabel, допустим 50... Идея в том, что такое количество динамически созданных...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru