Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2016, 16:19   #1
River_
Новичок
Джуниор
 
Регистрация: 24.01.2016
Сообщений: 2
По умолчанию Delphi RichEdit

Необходимо изменить стиль написания согласных букв в новой строке.

Если в исходной строке количество согласных букв больше гласных, то все согласные сделать подчеркнутыми, иначе выделить курсивом.

Код:
const vow:array[1..10] of char = ('а','е','ё','и','о','у','ы','э','ю','я');
        con:array[1..21] of char =('б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ');
 
procedure TForm1.Button1Click(Sender: TObject);
var i, sum_con, sum_vow, c:integer;
    ltr, ltr2:string;
begin
sum_con:=0;
sum_vow:=0;
//количество гласных и согласных
for i := 1 to length(Edit1.Text) do begin
   if pos(Edit1.Text[i], vow)<>0 then inc(sum_vow);
end;
sum_con:=length(Edit1.Text)-sum_vow;

//замена
if sum_con > sum_vow then
begin
  for i := 1 to 21 do begin
    let:= copy(RichEdit1.Text, pos(con[i], RichEdit1.Text), 1);
    RichEdit1.Text:=StringReplace(RichEdit1.Text, let, {***}, [rfReplaceAll, rfIgnoreCase]);
  end;
end;
вместо {***} нужно что-то что будет подчеркивать найденные согласные буквы

с RichEdit плохо знакома, так что не знаю как применить стиль к отдельным буквам
River_ вне форума Ответить с цитированием
Старый 24.01.2016, 16:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

То что-то - это SelStart и SelLength для выделения нужного фрагмента текста и SelAttributes для манипуляций с фонтом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.01.2016, 17:03   #3
River_
Новичок
Джуниор
 
Регистрация: 24.01.2016
Сообщений: 2
По умолчанию

спасибо огромное, наконец-то делает, то что нужно, почти...теперь проблема с повторяющимися буквами. Попробовала поставить цикл, чтобы проверял текст несколько раз, но как-то не работает

Код:
if sum_con > sum_vow then
begin
  for i := 1 to 21 do begin
    RichEdit1.SelStart:=pos(con[i],RichEdit1.Text)-1;
    RichEdit1.SelLength:=1;
    RichEdit1.SelAttributes.Style:=[fsUnderline];
  end;
end
else
  for i := 1 to 21 do begin
    RichEdit1.SelStart:=pos(con[i],RichEdit1.Text)-1;
    RichEdit1.SelLength:=1;
    RichEdit1.SelAttributes.Style:=[fsItalic];
  end;
end;
------
проблема решена

Последний раз редактировалось River_; 24.01.2016 в 18:42. Причина: проблема решена
River_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RichEdit в Delphi !abiturient! Общие вопросы Delphi 3 21.02.2012 13:29
Richedit. Delphi Pudge Помощь студентам 2 14.02.2012 02:02
Загрузка в RichEdit текста из файла, и получение его из RichEdit Byurrer Общие вопросы C/C++ 1 09.04.2011 10:17
RichEdit в Delphi Valerich Помощь студентам 0 02.05.2009 13:53
RichEdit как Delphi LeoN Общие вопросы Delphi 8 13.10.2007 20:44