Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
BIOS [8]
DOS и Консоль [0]
Kylix [0]
Windows [0]
Аудиокарта и Видеокарта [0]
Буфер обмена [0]
Драйвера [1]
Клавиши [0]
Компьютер [0]
Монитор и Экран [0]
Мышка и Курсор [0]
Переменные окружения [0]
Принтеры и Печать [0]
Процессор [0]
Реестр [0]
Сканер [0]
Сообщения Windows [0]
Справочник по сообщениям [0]
Язык [17]

Наш опрос
Оцените мой сайт
Всего ответов: 30

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » ОС и Железо » Язык

Richedit сам меняет язык при перемещении

Самое главное, что мне не нравится в Richedit - это то, что он сам меняет язык при перемещении по тексту, не смотря, что вы включили нужный язык, при переходе на участок текста, набраный другим языком.

этот баг я обхожу так.

  1. я создаю потомка Richedit:
    • меню Component\New Component
    • указываю предком TRichedit
  2. Переписаю обработку события WM_INPUTLANGCHANGE, при этом я не вызываю обработчик предка, т.е. Richedit-а
  3. Заодно обрабатываю событие WM_INPUTLANGCHANGEREQUEST, которое сообщает, что пользователь изменил язык. Тут надо вызвать обработчик предка, а то не будет переключаться язык.

Вот что из этого получилось. Имеем исправленный компонент VCL с дополнительным событием.


unit RichEditEx;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;

type
TLangChangeEvent = procedure(Sender: TObject; Lang: HKL) of object;

TRichEditEx = class(TRichEdit)
private
FOnLangChange: TLangChangeEvent;
procedure WMLangRequest(var M: TMessage); message WM_INPUTLANGCHANGEREQUEST;
procedure WMLangChange(var M: TMessage); message WM_INPUTLANGCHANGE;

{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
property OnLangChange: TLangChangeEvent read FOnLangChange write
FOnLangChange;

{ Published declarations }
end;

procedure Register;

implementation

procedure tricheditex.WMLangRequest(var M: TMessage);
begin
if assigned(FOnLangChange) then
FOnLangChange(self, m.LParam);
inherited;
end;

procedure tricheditex.WMLangChange(var M: TMessage);
begin
m.Result := 1;
end;

procedure Register;
begin
RegisterComponents('Samples', [TRichEditEx]);
end;

end.

Категория: Язык | Добавил: Skinner (11.09.2008)
Просмотров: 422 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2024 Хостинг от uCoz