relictus
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Други, помогите решить проблемку. Заключается она в том, что не могу ввести русские буквы с клавиатуры в компонент ESBPCSEdit из набора ESBPCS в портируемом на D2009 проекте, программно - всё ок. Вводимый символ обрабатывается так: Код: procedure TESBCustomEdit.KeyProcess (var Key: Char); var fEnterAsTab: Boolean; fESCAsUndo: Boolean; begin if (Key = #13) then begin Key := #0; if fEnterAsTab then SendMessage (GetParentForm (Self).Handle, WM_NEXTDLGCTL, 0, 0); end else if (Key = #27) and fEscAsUndo then begin Key := #0; Undo; end else if (Key = #14) and AllowKbdNull and not ReadOnly then begin SetNull (True); if Assigned (fOnNull) then fOnNull (Self); Key := #0; end else if Key = ^A then begin SelectAll; Key := #0 end else if fValidChar <> [] then begin {$IFDEF D12AndAbove} if (Key >= #32) and not CharInSet (Key, fValidChar) then // <--- {$ELSE} if (Key >= #32) and not (Key in fValidChar) then {$ENDIF} begin Key := #0; // MessageBeep (0); end {$IFDEF D12AndAbove} else if CharInSet (Key, fValidChar) then {$ELSE} else if (Key in fValidChar) then {$ENDIF} begin if fNull then begin SetNull (False); Clear; end; end end else if (Key >= #32) then begin Key := #0; // MessageBeep (0); end; end; | К примеру, была нажата русская "э", но она не проходит отмеченное условие if (Key >= #32) and not CharInSet (Key, fValidChar) then // <--- и в поле edit'a естественно ничего не выводится. Здесь fValidChar: TESBCharSet; // Set of Valid Characters for Keyboard Input type // Set of Characters. TESBCharSet = set of AnsiChar; Если поменять CharInSet (Key, fValidChar) на CharInSet (AnsiChar(Key), fValidChar), то с русскими lowercase символами становится все ок, но вот с uppercase что-то не то, вместо "ЙЦУКЕНГШЩЗХЪ" выводится "ЦУШЩХЪ". |