→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Текст в RichEdit 
Автор Сообщение
Начинающий

Регистрация: 10.03.2008
Сообщения: 17

Репутация: 0 [ ? ]
Сообщение Текст в RichEdit
Помогите пожалуйста, у меня такая ситуация: мне нужно в RichEdit отдельные слова делать курсивом. Но эти слова нужно указать сразу в програме, тоесть при нажатии кнопки програма должна искать эти слова в RichEdit и делать их курсивом.


22.03.2008 10:44
Профиль
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение 
У класса-предка TRichEdit TCustomRichEdit есть метод FindText. С помощью него ищем текст и выделяем его курсивом

[syntax=cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int StartPos, Position, Endpos;
AnsiString SearchText ="coding.in.ua";
StartPos = 0;

Endpos = RichEdit1->Text.Length();

while (Position!=-1)
{


Endpos = RichEdit1->Text.Length() - StartPos;
Position = RichEdit1->FindText(SearchText, StartPos, Endpos, TSearchTypes()<< stMatchCase);


RichEdit1->SelStart = Position;
RichEdit1->SelLength = SearchText.Length();
RichEdit1->SelAttributes->Style =RichEdit1->SelAttributes->Style<<fsItalic;
StartPos = Position+SearchText.Length();
}





}
[/syntax]

_________________
If it works, then it created by ivan-hohol, if not, then I don't know who this created


22.03.2008 12:30
Профиль Отправить email ICQ
Начинающий

Регистрация: 10.03.2008
Сообщения: 17

Репутация: 0 [ ? ]
Сообщение 


25.03.2008 21:12
Профиль
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение 

_________________
If it works, then it created by ivan-hohol, if not, then I don't know who this created


26.03.2008 0:11
Профиль Отправить email ICQ
Начинающий

Регистрация: 10.03.2008
Сообщения: 17

Репутация: 0 [ ? ]
Сообщение 


26.03.2008 17:40
Профиль
Профи
Аватара пользователя

Регистрация: 26.02.2008
Сообщения: 112
Откуда: Украина

Репутация: 2 [ ? ]
Сообщение 
Могу поспорить, что ты вместо того, чтобы разобраться в алгоритме сделал так (или примерно так):
[syntax=cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int StartPos, Position=0, Endpos;

AnsiString *SearchWords;
SearchWords = new AnsiString[6];
SearchWords[0]="coding.in.ua";
SearchWords[1]="самый";
SearchWords[2]="лучший";
SearchWords[3]=" в ";
SearchWords[4]="мире";
SearchWords[5]="форум";
for(int i=0;i<6;i++)
{


StartPos = 0;
Endpos = RichEdit1->Text.Length();

while (Position!=-1)
{


Endpos = RichEdit1->Text.Length() - StartPos;
Position = RichEdit1->FindText(SearchWords[i], StartPos, Endpos, TSearchTypes()<< stMatchCase);


RichEdit1->SelStart = Position;
RichEdit1->SelLength = SearchWords[i].Length();
RichEdit1->SelAttributes->Style =RichEdit1->SelAttributes->Style<<fsItalic;
StartPos = Position+SearchWords[i].Length();
}

}



}
[/syntax]
И это не сработало (выделило курсивом только первое слово).
Здесь нужно каждый раз обновлять значение переменной Position, потому что цикл while идёт пока Position!=-1.
А когда Position==-1? Тогда когда FindText не найдёт ничего и вернёт -1. Алгоритм пройдёт один раз и застопорится, поскольку Position будет равно -1. От этого и вся беда. В начале цикла for нужно каждый раз присваивать Position=0. Вот как это делается:
[syntax=cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int StartPos, Position=0, Endpos;

AnsiString *SearchWords;
SearchWords = new AnsiString[6];
SearchWords[0]="coding.in.ua";
SearchWords[1]="самый";
SearchWords[2]="лучший";
SearchWords[3]=" в ";
SearchWords[4]="мире";
SearchWords[5]="форум";
for(int i=0;i<6;i++)
{
Position=0;//вот здесь нужно обнулять Position
StartPos = 0;

Endpos = RichEdit1->Text.Length();

while (Position!=-1)
{


Endpos = RichEdit1->Text.Length() - StartPos;
Position = RichEdit1->FindText(SearchWords[i], StartPos, Endpos, TSearchTypes()<< stMatchCase);


RichEdit1->SelStart = Position;
RichEdit1->SelLength = SearchWords[i].Length();
RichEdit1->SelAttributes->Style =RichEdit1->SelAttributes->Style<<fsItalic;
StartPos = Position+SearchWords[i].Length();
}

}



}
[/syntax]

_________________
If it works, then it created by ivan-hohol, if not, then I don't know who this created


27.03.2008 0:21
Профиль Отправить email ICQ
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Кто сейчас на конференции

Зарегистрированные пользователи: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
© 2013 «Форум программистов Украины»