Не вводится кирилица в поле ввода.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Не вводится кирилица в поле ввода.

Сообщение tria » 05.02.2014 13:58:59

Форма создается динамически, все элементы формы соотв. тоже создаются динамически.
При этом есть формы, в которых в поде TEdit при выбранном языке ввода "русский" вводятся английские символы. Если вводить с нажатым Shift - вводятся большие русские символы.
Такая же проблема наблюдается в UTF8KeyPress на одном из гридов.
Куда хоть копать?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Не вводится кирилица в поле ввода.

Сообщение Vadim » 06.02.2014 04:19:16

1. Какая ОС?
2. Выложите сюда пример формы, в которой такой глюк.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Не вводится кирилица в поле ввода.

Сообщение tria » 06.02.2014 18:19:04

1. Виндоуз ХР, Виндоуз 7.
2. Выложить форму сложно, т.к. формы создаются динамически, список компонентов формы лежит в БД где описаны размеры, положение и прочие параметры компонент.

Компоненты объявлены как:
Код: Выделить всё
TMyEdit=Class(TControl)
private  { Private declarations }
  aTp:Word;
  ne:TTriaNumEdit;
  ed:TEdit;
  me:TTriaEdit;//TEditButton;
  mo:TMemo;
  dt:TTriaDateEdit;


Кусок кода по созданию компонет:
Код: Выделить всё
Case NewTp of
  2:begin
     If not Assigned(ne) Then begin
       ne:=TTriaNumEdit.Create(Owner);
       ne.Visible:=False;  ne.Parent:=Pointer(Owner);
       //ne.ButtonWidth:=0;
       ne.OnExit:=self.OnExit;
       ne.AutoSize:=False;
       ne.OnKeyDown:=KeyDown;
     end;
     NewCnt:=ne;
    end;
  3:begin
     If Assigned(RecvZn)and(RecvZn.pTypeRecv.NoLength)Then begin
       If not Assigned(mo) Then begin
         mo:=TMemo.Create(Owner);
         mo.Visible:=False; mo.Parent:=Pointer(Owner);
         mo.OnExit:=self.OnExit;    mo.OnKeyDown:=KeyDown;
       end;
       NewCnt:=mo;
     end
     Else begin
       If not Assigned(ed) Then begin
         ed:=TEdit.Create(Owner);
         ed.Visible:=False;   ed.Parent:=Pointer(Owner);
         ed.OnExit:=self.OnExit;
         ed.OnKeyDown:=KeyDown;
       end;
       NewCnt:=ed;
     end;
    end;


Задание шрифта контролам:
Код: Выделить всё
f:=GetFont(Obj);
If Trim(vr.FontAtr.FontName)='' Then f.Name:=_DefFontAtr.FontName
                                 Else f.Name:=vr.FontAtr.FontName;
If vr.FontAtr.FontSize=0 Then f.Size:=_DefFontAtr.FontSize
                          Else f.Size:=vr.FontAtr.FontSize;
f.Style:=vr.FontAtr.FontStyle;//(fsBold, fsItalic, fsUnderline, fsStrikeOut)
//If vr.FontAtr.FontColor<>0 Then f.Color:=vr.FontAtr.FontColor;
f.Color:=vr.FontAtr.FontColor;
f.CharSet:=DEFAULT_CHARSET;


Где GetFont:
Код: Выделить всё
Function GetFont(Obj:TObject):TFont;
begin
Result:=Nil;
If Obj is TTriaEditButton Then Result:=(Obj as TTriaEditButton).Font
Else If Obj is TEdit Then Result:=(Obj as TEdit).Font
Else If Obj is TLabel Then Result:=(Obj as TLabel).Font
Else If Obj is TTriaLabel Then Result:=(Obj as TTriaLabel).Font
Else If Obj is TTriaGroupBox Then Result:=(Obj as TTriaGroupBox).Font
Else If Obj is TCheckBox Then Result:=(Obj as TCheckBox).Font
Else If Obj is TComboBox Then Result:=(Obj as TComboBox).Font
Else If Obj is TMyEdit Then Result:=(Obj as TMyEdit).Font
Else ShowMessage('GetFont Result:=nil');
end;
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Не вводится кирилица в поле ввода.

Сообщение tria » 26.03.2014 00:10:22

Разобрался. Проблема в том, что в этих окнах идет отработка сканера штрихкода.
Введенный символ запоминается, и если это не сканер штрихкода, передается активному компоненту с помощью SendMessage(Edit1.Handle, WM_CHAR, ХХХ, 0);
Теперь проблема в следующем. Как с помощью SendMessage послать контролу символ в кодировке utf8?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 242

Рейтинг@Mail.ru