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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2014, 19:19   #1
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию Странная реакция RichEdit'а на смену языка

Доброго времени суток. Я работаю с компонентом TRichEdit, тесты провожу на Win7 в Delphi XE7 и Delphi 7.
Создаю на форме RichEdit и кнопку, далее пишу в обработчике нажатия по кнопке
Код:
RichEdit1.SelAttributes.Name:='Times New Roman';
После запуска выделяю текст и нажимаю кнопку, при этом шрифт в RichEdit'е меняется.
И вот на этом моменте, я убираю выделение с текста который уже Times New Roman
и стоит мне нажать Shift + Alt (сменить язык) и набрать любой символ,
как уже введенный текст в строке RichEdit'а меняется на Tahoma,
т.е. ладно бы я выделил тот текст и он заменился на текст с шрифтом по умолчанию,
но я ввожу текст в другом месте строки, старый текст НЕ должен меняться!

При этом вот это
Код:
DefAttributes.Name:='Times New Roman';
Font.Name:='Times New Roman';
так же не играет никакой роли, хоть пиши хоть не пиши.
Пробовал вместо RICHED20.DLL использовать MSFTEDIT.DLL (написал раньше модуль
подключения к более новой библиотеке для работы с таблицами), всё тоже самое.
И даже ничего не делая с делфой - кладу компонент на форму, рядом кнопку и эффект тот же.

При этом есть еще две машины, тоже Win7 на одной всё так же как у меня, а на другой работает без ошибок,
попробовал взять RICHED20 и RICHED32 c неё и положить рядом с .exe файлом, но эффект тот же.

Причем иногда после того как шрифт сбрасывается на Tahoma, происходят такие спецэффекты:
меняя стиль текста на курсивный или перебирая шрифт текст всё же начинает рисоваться как Times New Roman.
Но на нужном размере текста, всё еще обрисовывается как Tahoma.

Delphi XE7 использует RICHED20.DLL, а Delphi 7 использует еще и версию RICHED32.DLL и там эта ситуация
обрабатывается иначе, текст в строке так же становится шрифтом Tahoma,
но если его выделить, он перерисовывается в Times New Roman.

И тоже самое происходит если в RichEdit'е изначально был проставлен Font.Name = 'Times New Roman' и вписан текст
я ставлю курсор в эту строку, меняю язык, и всё что в ней было введено в Times New Roman сбрасывается в Tahoma
проект нулёвый, буквально один RichEdit в нём, никакого моего кода там нет. Положил RichEdit, сменил в Properties Font.Name и
запустил, нажал Shift + Alt, ввёл символ -всё сломалось.

Самое смешное, что выделяя изменившуюся строку и нажимая кнопку с событием
ShowMessage(RichEdit1.SelAttributes .Name); - выводится Times New Roman.

Если скопировать эту неправильную строку (в Tahoma), и вставить в MS Word 2007, она вставится
и обрисуется как Times New Roman, а если скопировать её и вставить обратно,
RichEdit будет нормально дописывать английский текст в русский, но при дальнейшей работе обрисовка о5 собьётся.
Но если вырезать шрифт в псевдотахоме и вставить его обратно, он таким и останется.
А ингода могут сочетания Shift + Alt (смена языка) перестать работать.
Что за дурдом с этим RichEdit'ом???

Поставил на форму таймер с
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  InvalidateRect(RichEdit1.Handle,
  TRect.Create(
    RichEdit1.Left,
    RichEdit1.Top,
    RichEdit1.Left+RichEdit1.Width,
    RichEdit1.Top+RichEdit1.Height
  ), True);
  RichEdit1.Invalidate;
  RichEdit1.InitiateAction
end;
и проверил как ведет себя тахомская строка, по началу RichEdit просто моргал,
тогда я вырезал и вставл строку в MS Word, а потом обратно - строка нормализовалась и продолжала моргать
потом я снова попытался её "испортить", сменил язык, дописал букву "d" теперь строка
моргает с Tahoma на Times New Roman. Кто-то в делфе хреного рисует это точно...

Причем у меня этот баг во всех RichEdit'ах, включая виндовый wordpad.
пыжок

Последний раз редактировалось maloun; 15.12.2014 в 12:34.
maloun вне форума Ответить с цитированием
Старый 15.12.2014, 01:34   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от maloun Посмотреть сообщение
и стоит мне нажать Shift + Alt (сменить язык) и набрать любой символ, как уже введенный текст в строке RichEdit'а меняется на Tahoma
Проверила у себя - не наблюдается.

А ответ вы уже дали сами:
Цитата:
Сообщение от maloun Посмотреть сообщение
Причем у меня этот баг во всех RichEdit'ах, включая виндовый wordpad.
Вот отсюда и пляшите - скорее всего у вас что-то подпорчено в самой винде...
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хук на смену активного окна VikaR Win Api 1 21.09.2012 10:30
Странная реакция среды на ссылки Darth.Vader Общие вопросы C/C++ 4 06.12.2009 01:57
странная реакция FloatToStr CrazyXaoc Общие вопросы C/C++ 6 29.05.2009 17:35
Странная реакция drknn Помощь студентам 2 02.09.2007 15:51