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

Ввод текста в РичЭдит1 и вызов формы1

26.11.2013, 09:02. Показов 1290. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчани!! Вопрос в следующем. Подскажите можно с помощью текста введенного в RichEdit1 вызвать Form1, т.е. при нажатии мышкой на текст расположенный в RichEdit1 должна появиться Form1.
Если не трудно подскажите. Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2013, 09:02
Ответы с готовыми решениями:

Как запустить из формы1 всплывающую форму2, которая ищет данные по активному полю формы1?
Помогите ! Как запустить из формы1 всплывающую форму2, которая ищет данные по активному полю формы1 ?

Исправить ввод только слова на ввод целого текста
Помогите исправить. Надо чтобы не одно слово можно водить, а текст. uses crt; var i,n,m:integer; a:string; begin clrscr;...

Ввод текста, обработка и вывод текста в то же поле
Здравствуйте!Как сделать в delphi 10 seattle нечто вроде экспертных систем?Вводим текст (типа как в консоли), обрабатываем его, и выводим...

17
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
26.11.2013, 11:27
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 
TObject *oF;
String findFormName = "Form3";
 
 
if( RichEdit1->Lines->Strings[RichEdit1->CaretPos.y].Pos( findFormName ) )
  if( oF = Application->FindComponent( findFormName ) )
    ((TForm*)oF)->Show();
 
}
1
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
26.11.2013, 11:31
Цитата Сообщение от PEAPLE Посмотреть сообщение
Здравствуйте форумчани!! Вопрос в следующем. Подскажите можно с помощью текста введенного в RichEdit1 вызвать Form1, т.е. при нажатии мышкой на текст расположенный в RichEdit1 должна появиться Form1.
Если не трудно подскажите. Заранее благодарен.



Поиском пользоваться религия не позволяет?
Старый добрый LK Вам в помощь.
1
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
26.11.2013, 15:28  [ТС]
Все понятно в принципе. Подскажите как объявить в Unit1.h в области public:

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
void __fastcall TMainForm::WndProc(Messages::TMessage &Message);
 
Вот код в Unit1.h почему-то не идет
 
ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
 
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
 
__published:    // IDE-managed Components
        TRichEdit *RichEdit1;
private:    // User declarations
public:  void __fastcall WndProc(Messages::TMessage &Message);// User declarations
        __fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
Добавлено через 1 час 17 минут
SatanaXIII спасибо большое, то что искал. Я не много видоизменил код, если Вы не против. Т.е с помощью слова например "КОНЬ" вызывать форму 2. Можно такое сделать Посмотрите если не трудно.
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
TObject *oF;
String findName = "КОНЬ";
 
 
if( RichEdit1->Lines->Strings[RichEdit1->CaretPos.y].Pos( findName ) )
  if( oF = Application->FindComponent( findName ) )
    Form2->Show();
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.11.2013, 15:36
... я против (если вы не против) - компонента Конь наверняка нету в вашем приложении. Проанализируйте код, там его немного.
{четвертая и девятая строки - лишние}
1
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
26.11.2013, 16:19  [ТС]
Ввожу слово "Привет" через StringListEditor в RichEdit1. Данное слово внесено в код. Производим поиск данного слова (find Name) и если оно найдено приводит к открытию Form2. Ура товарищи получилось. nick42 я сделал. Спасибо Ура!!!!!!!!!!

C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TObject *oF;
String findName = "Законадательства РФ";
 
 
if( RichEdit1->Lines->Strings[RichEdit1->CaretPos.y].Pos( findName ) )
 
    Form2->Show();
}
Добавлено через 25 минут
Извените nick42. Вопрос. Можно открыть данным способом документ pdf. Код компилируется, но документ pdf молчит, т.е. не открывается. В правильном направлении иду?

C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TObject *oF;
String findName = "Çàêîíàäàòåëüñòâà ÐÔ";
 
 
if( RichEdit1->Lines->Strings[RichEdit1->CaretPos.y].Pos( findName ) )
 
 
ShellExecute(Handle, "open", "POSTANOV 629.pdf", NULL, NULL, SW_RESTORE);
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.11.2013, 16:43
если документ "рядом" с программой, - должен открываться (если, конечно, к расширению pdf привязан ADOBE-reader или другое такое же приложение).
0
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
26.11.2013, 17:03  [ТС]
Да привязан. Т.е. сам файл pdf расположен в папке где расположены файлы данного вопроса. Вообще я открываю другим способом этот документ через Button все получается. Понятно буду пробовать.

Добавлено через 15 минут
Все получилось и word документ также открывается. Спасибо ребята.
0
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
28.11.2013, 08:44  [ТС]
Здравствуйте nick42. Все получается работает. Ввел второе предложение чтобы открыть документ с расширением doc. Но почему-то при нажатии на название первого документа появляются doc и pdf документы, но при нажатии на второе название появляется нужный doc документ. Посмотрите код пожалуйста. Заранее благодарен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm2::RichEdit2MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TObject *oF;
String findName = "Постановление Правительства РФ от 17 августа 2010г. №629";
if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
 
 ShellExecute(Handle, "open", "1\\10.pdf", NULL, NULL, SW_RESTORE);
     {
 
 
if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
 
String findName = "ПостановлениеПравительстваРФот12ноября2011г.№957";
ShellExecute(Handle, "open", "2\\2.doc", NULL, NULL, SW_RESTORE);
 
 }
}
Добавлено через 48 секунд
Извините забыл выделить код.

Добавлено через 13 минут
Если делаю как в представленном коде представлен документ с расширением doc не открывается, а документ с расширением pdf открывается. Возможно надо ввести какое-то разделения между двумя строками.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm2::RichEdit2MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TObject *oF;
String findName = "Постановление Правительства РФ от 17 августа 2010г. №629";
if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
 
 ShellExecute(Handle, "open", "1\\10.pdf", NULL, NULL, SW_RESTORE);
 
     {
 String findName = "ПостановлениеПравительстваРФот12ноября2011г.№957";
if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
 
 
ShellExecute(Handle, "open", "2\\2.doc", NULL, NULL, SW_RESTORE);
 
}
}
//-------------------
-

Добавлено через 10 часов 30 минут
Господа форумчани не подскажите примерное решение в этом вопросе. Т.е как разделить открытие одного документа от другого. Получается с открытием первого документа открывается второй документ одновременно и при открытие второго документа открывается первый документ. Представляю код. Заранее благодарен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm2::RichEdit2MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TObject *oF;
String findName = "Ïîñòàíîâëåíèå Ïðàâèòåëüñòâà ÐÔ îò 17 àâãóñòà";
 
 
if( RichEdit1->Lines->Strings[RichEdit1->CaretPos.y].Pos( findName ) );
 
 
ShellExecute(Handle, "open", "POSTANOV 629.pdf", NULL, NULL, SW_RESTORE);
 
 
String findName1 = "Ïîñòàíîâëåíèå Ïðàâèòåëüñòâà ÐÔ îò 12 íîÿáðÿ";
 
 
if( RichEdit1->Lines->Strings[RichEdit1->CaretPos.y].Pos( findName1) );
 
 
ShellExecute(Handle, "open", "POSTANOV 630.doc", NULL, NULL, SW_RESTORE);
   }
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.11.2013, 09:12
PEAPLE, в первом коде в девятой и в семнадцатой строке что за скобки (десятая и семнадцатая строка во втором)? Не нужны они там.

Цитата Сообщение от PEAPLE Посмотреть сообщение
ПостановлениеПравительстваРФот12ноября20 11г.№957
Ух. Вот сильно я б не рекомендовал вносить в программу такие записи (если это конечно не просто тест).

Наверное как-то так имелось в виду:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm2::RichEdit2MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
String findName = "Постановление Правительства РФ от 17 августа 2010г. №629";
 
if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
  ShellExecute( Handle, "open", "1\\10.pdf", NULL, NULL, SW_RESTORE );
else
  if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
    ShellExecute( Handle, "open", "2\\2.doc", NULL, NULL, SW_RESTORE );
}
0
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
28.11.2013, 09:45  [ТС]
Т.е на компоненте RichEdit2 внесены записи через String List Editor следующие записи:
1. "Постановление Правительства РФ от 17 августа 2010г. №629"
2. "Постановление Правительства РФ от 12 ноября"
После компиляции нажимаю на 1. "Постановление Правительства РФ от 17 августа 2010г. №629" выскакивает этот документ и после нажатия на 2. "Постановление Правительства РФ от 12 ноября" появляется этот документ. Вот в принципе в чем заключается задача. Интересно что если я вместо текста в RichEdit2 ввожу 1 это первый документ и 2 это второй документ все работает прекрасно, но когда ввожу текст с датами начинается шоу. Спасибо за справку. Вы знаете, но почему-то код не работает.

Добавлено через 15 минут
Дела в том, что я пробовал все это сделать через компонент StaticText все получается, но к примеру если на RichEdit2 будут находится десять таких названий и ScroollBars (вертикальный установил) в RichEdit2 будет прокручиваться, а компоненты StaticText1 -StaticText10 будут находится на месте т.е не будут реагировать на движение поля RichEdit2. Поэтому я пошел этим путем возможно не логичным, но такая задача есть. Может вы подскажите какой-то другой способ. Может возможно как-то привязать StaticText к RichEdit2 чтобы он двигался вместе с полем RichEdit2 при установление вертикального ползунка. Заранее спасибо.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.11.2013, 10:57
А вы уверены, что
Постановление Правительства РФ от 17 августа 2010г. №629
влезет в RichEdit в ширину?

Если RichEdit будет узким, то возможно такое формирование строк:
Code
1
2
Постановление Правительства 
РФ от 17 августа 2010г. №629
Соответственно RichEdit1->Lines->Strings.Pos вернет "Постановление Правительства" для первой строки и "РФ от 17 августа 2010г. №629" для второй.
0
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
28.11.2013, 11:48  [ТС]
Да уменьшил по ширине. В RichEdit выглядит так
1Постановление Правительства
2РФ от 17 августа 2010г. №629
3 Постановление Правительства
4 РФ от 12 ноября 2011г. №957
Код который представляю открывает только данный документ РФ от 12 ноября 2011г. №957 документ номер 2 не открывает.
String findName = "РФ от 17 августа 2010г. №629";

C++
1
2
3
4
5
6
7
if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName ) )
  ShellExecute( Handle, "open", "1\\10.pdf", NULL, NULL, SW_RESTORE );
 
    String findName1 = " РФ от 12 ноября 2011г. №957";
 
  if( RichEdit2->Lines->Strings[RichEdit2->CaretPos.y].Pos( findName1 ) )
    ShellExecute( Handle, "open", "2\\2.doc", NULL, NULL, SW_RESTORE );
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.11.2013, 12:02
PEAPLE, конечно тогда не сработает. Каждая из полустрок ведь сравнивается со всей строкой.

Постановление Правительства равно Постановление Правительства РФ от 17 августа 2010г. №629 ?
РФ от 17 августа 2010г. №629 равно Постановление Правительства РФ от 17 августа 2010г. №629 ?
Постановление Правительства равно Постановление Правительства РФ от 17 августа 2010г. №629 ?
РФ от 12 ноября 2011г. №957 равно Постановление Правительства РФ от 17 августа 2010г. №629 ?

Вот вам и ответ.


Выход - или ищите неполный текст в строках (типа №957) или, если нет уникальных кусков в каждой строке, составляйте по какому-то принципу из полустрок полные строки.
1
6 / 6 / 6
Регистрация: 28.05.2013
Сообщений: 115
28.11.2013, 12:51  [ТС]
Спасибо SatanaXIII. Кусочный поиск помог. Но все таки вопрос на будущие почему не желательно такие тексты помещать и производить по ним поиск. И сразу вопрос по теме как убрать курсор, если в инспекторе объектов для
RichEdit ReadOnly установлю в true. Курсор мигает понятно текст не отформатируешь. Но мигает режет зрение как-то плоховато. Не подскажите. Заранее спасибо.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.11.2013, 13:59
PEAPLE, если у вас номера этих документов уникальны, и обязательно присутствуют в названии каждого документа, то можете на этом методе и остановиться. Но все равно, на всякий, лучше предусмотреть выдачу какого-либо сообщения или иной какой реакции, если вдруг в списке не окажется ни единого номера.

Цитата Сообщение от PEAPLE Посмотреть сообщение
почему не желательно такие тексты помещать и производить по ним поиск
Имелось в виду, что надо все унифицировать. Если вам нужно найти какой-то текст, то надо сделать переменную, в которую помещать текст, и искать уже по этой переменной; оперировать внутри функции только переменной. Таким образом, поместив в эту переменную текст из вне, из какого-нибудь Edit-а, можно будет на лету менять поисковый запрос. Естественно, при условии, если вам нужно искать не какой-то конкретный текст постоянно. То есть в вашем случае лучше всего создать функцию, принимающую номер документа, и возвращающую какую-нибудь ошибку, если не может открыть этот документ ( 0 - входное значение пусто, 1 - текст не содержит искомого слова, 2 - ошибка чтения, 3 - неизвестная ошибка...), и уже оперировать этой функцией.

Цитата Сообщение от PEAPLE Посмотреть сообщение
как убрать курсор
Что-то даже не знаю как совсем убрать курсор. Типа того как-нибудь:
C++
1
2
3
4
5
if( RichEdit1->ReadOnly == 0 )
  {
  HWND hwnd = RichEdit1->Handle;
  HideCaret(hwnd);
  }
Добавлено через 5 минут
Бгг.
C++
1
2
3
4
void __fastcall TForm1::RichEdit1Change(TObject *Sender)
{
  HideCaret( RichEdit1->Handle );
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2013, 14:06
Цитата Сообщение от PEAPLE Посмотреть сообщение
убрать курсор
можно установить ему значение crArrow, а по SelectionChange "уносить фокус" на другой компонент: ( Button1->SetFocus(); )
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.11.2013, 14:20
Меня вот смущает вот эта фраза:
Цитата Сообщение от PEAPLE Посмотреть сообщение
Курсор мигает понятно текст не отформатируешь.
Если текст надо форматировать, зачем тогда устанавливать ReadOnly?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2013, 14:20
Помогаю со студенческими работами здесь

Форма2 в пределах формы1
Подскажите пожалуйста, как сделать, чтобы форма2, при перетаскивании мышкой, не могла выходить за пределы формы1, то есть чтобы можно было...

Переход из формы1 в форму2
Суть проблемы в том что в форме1 используется таймер который переводит курсор на поле едит1: void __fastcall TForm1::Timer1Timer(TObject...

Форма2 поверх формы1
Как добиться, чтобы которая форма активна, ты и находилась поверх другой? Например: Дана форма1, при выполнении операции открывается...

Вызов компилятора для набранного текста.
Допустим, я решил написать свою оболочку програмирования на Java. Каким образом я могу вызвать компилятор, чтобы компильнуть набраный текст...

Передача информации из формы1 в форму2
Добрый день. Знаю данных тем на передачу инфы из формы в форму было много, но я почему застрял на данном моменте. Итак, есть форма1 в...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru