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

Форум программистов: 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 ] 


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

Зарегистрированные пользователи: нет зарегистрированных пользователей


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

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