На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Редакторы текста, отчеты / Кто-нибудь знает, как "отучить" RichEdit самопpоизвольно пеpеключать pаскладку клавиатуpы пpи пеpеходе с pусского на английский текст? Сделать домашней страницей Добавить в избранное Написать писмо

Кто-нибудь знает, как "отучить" RichEdit самопpоизвольно пеpеключать pаскладку клавиатуpы пpи пеpеходе с pусского на английский текст?


Александp   (24.04.01 16:15)

Кто-нибудь знает, как "отучить" RichEdit самопpоизвольно пеpеключать pаскладку клавиатуpы пpи пеpеходе с pусского на английский текст?
EM_SETLANGOPTIONS (WM_USER+120) почему-то не помогает!




LOM   (24.04.01 19:59)

Вот это было ФАКе Озерова:
---------------------------------------
Максим Гуменюк пишет:
Самое главное, что мне не нравится в Richedit - это то, что он сам меняет язык при перемещении по
тексту, не смотря, что вы включили нужный язык, при переходе на участок текста, набраный другим
языком.

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

я создаю потомка Richedit:
меню Component\New Component
указываю предком TRichedit
Переписаю обработку события WM_INPUTLANGCHANGE, при этом я не вызываю обработчик предка, т.е.
Richedit-а
Заодно обрабатываю событие 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.  

Максим Гуменюк, max1gu@fiberia.com


---
Из конференции сайта МАСТЕРА DELPHI (delphi.mastak.ru)

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz