Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 02.11.2020
Сообщений: 24
Builder 6

Создание компонента RichEdit программным путём

08.11.2020, 17:53. Показов 5487. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу тектовий редактор и нужно чтоб при нажатии на кнопку создавало новую страницу (компонент RichEdit) как мне это сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2020, 17:53
Ответы с готовыми решениями:

CategoryPanelGroup: возможно ли программным путем добавлять категории и пункты в них?
Может ли кто-то скинуть документацию по компоненту CategoryPanelGroup, не нашел нигде... Возможно ли программным путем добавлять...

Архивирование программным путем C++. Чем?
Вот в чем вопрос, как реализовать архивирование? Библиотеки вроде 7-zip плохо документированы, если не сказать больше. Нужна простая и...

Трудности с программным размещением компонента на странице
Я создал диалоговое приложение на Visual C++ 2012 с использованием MFC. В этом приложении на диалоговом окне находится CTabCtrl, на...

29
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.11.2020, 22:46
Студворк — интернет-сервис помощи студентам
Впрочем, можно и с одним скроллбоксом (alClient) без панели (просто я их люблю... ).
1
0 / 0 / 0
Регистрация: 02.11.2020
Сообщений: 24
11.11.2020, 03:48  [ТС]
да создает. А как тогда правильно обращаться програмно к RichEdit?. Я написал
C++
1
ScrollBox1->FindComponent("RichEdit" + IntToStr(i)))
запустилась програ но вибила ошибка когда я вызвал кнопку где это обращения. А когда пишу так
C++
1
Panel1->ScrollBox1->FindComponent("RichEdit" + IntToStr(i)))
то сразу ошибка что так нельзя писать. RichEdit создаются у ScrollBox1 которая в Panel1 и прокрутка работает и статус бар не исчезает. Но теперь вопрос как обратится програмно к динамичным RichEdit?
Воч что прописал когда создавал
C++
1
2
TRichEdit* T=new TRichEdit(ScrollBox1);
T->Parent=ScrollBox1;
и когда создал тоже просто скрол бокс без панели и в нем RichEdit создаю то тоже ошибка

Добавлено через 15 минут
а все порешал просто обращатся FindComponent

Добавлено через 13 минут
тут ёщо вопрос. как мне переносить текст между рич едитами. Я впринцыве понимаю что нужно вызвать событие если RichEdit не динамичен OnChange и если переполнен то переход фокуса на другой рич едит но если у нас они динамичные то как создавать для них событие а точнее наверное масив событий чтоб проверяли где курсор вызывали событие рич едита в котором курсор и если переполнен то на другой едит а если ево нет то новый создать. Я прописывал событие для формы OnKeyPress и думал что оно будет для любого нажатия клавишы и прописал такое но как вы уже поняли что ничего не вышло(
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
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
 
for(int i=0;i<number;i++){
if(static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(i)))->Focused()&&static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(i)))->Text.Length()==2) {
if(i==number-1){
TRichEdit* T=new TRichEdit(ScrollBox1);
T->Parent=ScrollBox1;
T->Left=20;
T->Top= number*45+a*(number)*TrackBar1->Position;
T->Name="RichEdit" + IntToStr(number);
T->Height=a*TrackBar1->Position;
T->Width=b*TrackBar1->Position;
T->Font->Size=static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Font->Size;
T->Paragraph->FirstIndent = static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Paragraph->FirstIndent;
T->Paragraph->LeftIndent = static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Paragraph->LeftIndent;
T->Paragraph->RightIndent = static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Paragraph->RightIndent;
static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Cursor;
number++;
}
else{ static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(i+1)))->Cursor;
}
}
}
}
Как зделать правильно?

Добавлено через 6 минут
а ошибка с обращениям осталась я невнимательно проверил все норм когда обращаюсь к первому изначально заданому рич едиту а к програмным выскакивает ошибка?

Добавлено через 1 час 7 минут
Я уже решил ошибку с страницами просто создавая первый рич едит в FormActivate в скрол боксе и обращаюс так :ScrollBox1->FindComponent("RichEdit" + IntToStr(i)))
теперь вопрос как переносы между страницами зделать?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.11.2020, 11:40
Когда создаете новый ричэдит, добавьте строку_
C++
1
T->OnChange = RichEdit1Change;
(Т - создаваемый RichEdit). А в обработчике RichEdit1Change в самом вначале впишите...
C++
1
  TRichEdit *red = (TRichEdit*)Sender;
ну, или через cast, и внутри замените все упоминания RichEdit1 на этот новоявленный red. Под red здесь будет пониматься вызвавший обработчик ричэдит, в том числе динамический. Естественно, всем этим ричэдитам в качестве обработчика OnChange должен быть сопоставлен этот RichEdit1Change.

Добавлено через 1 час 35 минут
И, кстати, мне не очень понятно само это создание множества ричэдитов, их "переполнение"... . Я сделал загрузку в StringList большого текстового файла; его загружаю в RichEdit; у того выставил в false HideScrollBars и ScrollBars - ssVertical, и 23 Мб текста в него отлично помещаются. Только ждать пару секунд приходится, пока идет его загрузка. О каком переполнении речь?

Добавлено через 34 минуты
И ещё не могу сообразить такую штуку: в стринглист этот большой файл грузится быстро, - меньше секунды. И при пустом RichEdit'е еще 3-4 секунды заполняется он. Вот по такому "сценарию"...
C++
1
2
3
4
5
6
7
void __fastcall TForm1::ScrollBox1DblClick(TObject *Sender)
{
    SL->LoadFromFile("test.txt");
     RichEdit1->Visible =0;
    RichEdit1->Text=SL->Text ;
     RichEdit1->Visible =1;
}
Но когда то же при заполненном RichEdite (т.е. повторный DblClick), то значительно короче... - по секунде загрузка в StringList и в RichEdit. Или просто это глюки визуализации и я зря ломаю голову?
0
0 / 0 / 0
Регистрация: 02.11.2020
Сообщений: 24
11.11.2020, 14:23  [ТС]
nick42, А что делать если у меня уже первый RichEdit создается динамично в FormActivate как догда создавать обработчик. Когда прописую при создании в FormActivate это:
C++
1
 T->OnChange = RichEdit1Change;
то пишет сразу ошибку потом я понял что RichEdit1 создался динамично и понял что надо через компонент обратится попробывал так:
C++
1
T->OnChange=static_cast<TRichEdit*>(ScrollBox1->FindComponent("RichEdit" + IntToStr(1)+"Change"));
и тоже ошибка. А если изначально задать RichEdit1 то уже придется все обращение переделывать если первая страница прописывать так FindComponent("RichEdit" + IntToStr(1)) а когда динамично то вот так ScrollBox1->FindComponent("RichEdit" + IntToStr(1)). Делать так? и создавать для сознаного програмой RichEdit1 OnChsnge. Или все же можно както в FormActivate вызвать?Или я немношко наверно непонял(
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.11.2020, 15:20
Сначала я хотел бы понять смысл "создавать RichEdit динамично". [Тогда многое понятно: и почему HideScrollBars (это же по умолчанию...), и др.]
0
0 / 0 / 0
Регистрация: 02.11.2020
Сообщений: 24
11.11.2020, 16:31  [ТС]
nick42, вот так
C++
1
2
3
4
5
6
7
8
9
10
11
TRichEdit* T=new TRichEdit(ScrollBox1);
T->Parent=ScrollBox1;
T->Left=20;
T->Top= number*45+a*(number)*TrackBar1->Position;
T->Name="RichEdit" + IntToStr(number);
T->Height=a*TrackBar1->Position;
T->Width=b*TrackBar1->Position;
T->Font->Size=static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Font->Size;
T->Paragraph->FirstIndent = static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Paragraph->FirstIndent;
T->Paragraph->LeftIndent = static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Paragraph->LeftIndent;
T->Paragraph->RightIndent = static_cast<TRichEdit*>(FindComponent("RichEdit" + IntToStr(number)))->Paragraph->RightIndent;
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.11.2020, 16:46
я это уже не раз видел...
Смысла динамического создания штатных компонентов я - лентяй - не вижу! когда все можно создать и настроить в дизайне.
Зачем создавать кучу RichEdit'ов? Если бы было несколько документов одновременно на редактировании, - ну, тогда понятно; и для этого я вначале рекомендовал PageControl.
0
0 / 0 / 0
Регистрация: 02.11.2020
Сообщений: 24
11.11.2020, 17:06  [ТС]
я просто думаю как сделать чтоб как в ворде листки были. А как с помощю PageControl ето сделать?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.11.2020, 17:11
"как в ворде"... мелкомягкие над офисом своим не один десяток лет коллективно трудятся; про пакет 97 я и сейчас вспоминаю с содроганием... .
Лучше в общих чертах напишите, что хотите (по минимуму), и с чего начались проблемы. А там видно будет.
1
0 / 0 / 0
Регистрация: 02.11.2020
Сообщений: 24
11.11.2020, 18:14  [ТС]
nick42, впринцыпе все такто работает что задумал. Но рас уж это такая сложная затея тогда сделаю попроще. Я так-то новичок учу билдер 2 месяца поэтому и не знал такого. Спасибо тогда на етом вы мне очень много чего подсказали чего я до этого не знал или не понимал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2020, 18:14

Приложение для доступа к БД программным путем без инструментов GUI
Вопрос задавался не раз. Извиняюсь за дублирование. Столкнулся с базами данных(делать было нечего). В качестве СУБД пробовал MS Access,...

Записать программным путем команды в bat файл через writefile
Как записать программыным путем команды в bat-файл через writefile?

Создание кода в программным путем.
Если не очень часто беспокою, есть еще один вопрос: Из открытой книги 'Main' с помощью VBA – 1.добавляю новую книгу Set Wbk =...

Динамическое создание компонента на Richedit
после динамического создания компонента TImage в richedit невозможно ничего набрать текс просто печатается пустым и все что было напечатано...

Создание программным путем компонент "RichTextBox" для "tabControl" вкладок
Есть 2 кнопки: 1 - &quot;Новая Вкладка&quot; - создает вкладку в tabControl1 с RichTextBox. 2 - &quot;Открыть Документ&quot; - создает вкладку в...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru