Текущий архив: 2004.08.01;
Скачать: CL | DM;
ВнизТочка на доп. клавиатуре Найти похожие ветки
← →
Алексей Петухов (2004-06-14 20:32) [0]Здравствуйте, уважаемые мастера.
Подскажите пожалуйста, как избавиться от запятой на дополнительной клавиатуре, которая вместо точки на русском языке выскакивает?
Заранее благодарен за помощь.
← →
Алексей Петухов (2004-06-14 20:45) [1]Поясню:
Если в раскладке"EN"
на доп. клавиатуре нажать"."
(#46) то получим"."
(#46).
А если в раскладке "RU" на доп. клавиатуре нажать"."
(#46) то получим","
(#44).
Цель: при нажатии"."
на доп. клавиатуре раскладке "RU
" получить"."
, а не","
.
← →
Mim1 © (2004-06-14 21:00) [2]Недавно этот вопрос задовался kaif"oм. Поищи.
← →
GuAV © (2004-06-14 21:04) [3]<off>
Mim1 ©.
Хочу смотреть анкету.
А её нету. :-(
</off>
← →
Mim1 © (2004-06-14 21:07) [4]kaif © (26.05.04 03:33)
Справа на клавиатуре есть точка. Когда текущий язык клавиатуры русский, эта точка понимается как DecimalSeparator (как запятая). Если текущий язык английский, то понимается, как точка.
Точка в качестве "точки" для ввода текста из этой части клавиатуры обычно не юзается. То есть я так понимаю, что что-то здесь глупо как-то изначально... Хочется, чтобы точка среди цифр всегда воспринималась, как DecimalSeparator. То есть как запятая при русских региональных настройках, если в них DecimalSeparator - запятая...
Может я сумбурно выражаюсь, но смысл вопроса, я думаю понятен...
Кто как с этим боролся?
Существует ли общепринятое нормальное решение?
--------------------------------------------------------------------------------
[1] Fay © (26.05.04 04:31)
С этим не надо бороться - это нормально.
Что именно тебе мешает?
--------------------------------------------------------------------------------
[2] REP (26.05.04 06:43)
If key="." Then Key=Decimalseparator
--------------------------------------------------------------------------------
[3] Reindeer Moss Eater © (26.05.04 08:50)
if ((key = ".") or (key = ",")) and (key <> DecimalSeparator) then key := DecimalSeparator;
--------------------------------------------------------------------------------
[4] Sandman25+1 (26.05.04 08:58)
if Key in [".",","] then
Key := DecimalDeparator
--------------------------------------------------------------------------------
[5] Mim1 © (26.05.04 09:03)
Можно эту проблемму попытаться побороть глобально? путем замены, одного из пареметров сообщений wm_key???. Где нибудь в application.onmessage.
--------------------------------------------------------------------------------
[6] Sandman25+1 (26.05.04 09:09)
[5] Mim1 © (26.05.04 09:03)
Не стоит использовать Application.OnMessage без особой нужды ИМХО. Для "глобального" решения пишется наследник TCustomEdit, который перекрывает DoKeyPress
--------------------------------------------------------------------------------
[7] kaif © (26.05.04 19:06)
Мне нужно глобально. Я не могу везде обработчики вешать. Видимо, придется это все пихать в предков каждого контрола... Не нравится мне это.
А через скан-коды клавиатуры или virtual keys отличить точку в правой части (среди цифр) от "законной" точки можно? Или это то же самое в сообщениях Windows?
--------------------------------------------------------------------------------
[8] Vlad © (26.05.04 19:12)
> Мне нужно глобально.
Application.OnMessage не поможет ?
--------------------------------------------------------------------------------
[9] Vlad © (26.05.04 19:14)
Хотя, это было бы не совсем правильно...
--------------------------------------------------------------------------------
[10] Тимохов © (26.05.04 19:16)
я в итоге сделать проверкой и заменой на decimalseparator.
но у меня все предки свои - т.е. мне было проще.
--------------------------------------------------------------------------------
[11] kaif © (26.05.04 23:42)
Всем спасибо. По крайней мере джентльменский набор решений ясен. Странно, почему вообще так сделана это точка справа... видимо проблема в том, что все раскладки клавиатуры независимы друг от друга и системе все равно, какое множество раскладок в данный момент имеется. А какой-то очень умный товарисч с самого начала заложил в русские региональные настройки запятую в качестве DecimalSeparator по умолчанию... Видимо тот же товарищ, что поставил букву Ё особняком. Умный шибко был чел.
--------------------------------------------------------------------------------
[12] Игорь Шевченко © (27.05.04 12:48)
> Странно, почему вообще так сделана это точка справа.
У наших заказчиков операторы этой кнопкой очень активно пользуются, потому как вводят суммы пользуясь правой частью клавиатуры, одной рукой.
--------------------------------------------------------------------------------
[13] Danilka © (27.05.04 13:00)
[12] Игорь Шевченко © (27.05.04 12:48)
Имеется ввиду другое. То, что, е едиторе будет точка либо запятая зависит от текущей раскладки клавиатуры, а не от выбранных региональных настроек в системе.
Впрочем, о таком поведении серой точки я только из этой ветки узнал. Операторши, как правило, языки не переключают, у них всегда русский.
Так что, не думаю, что имеет смысл тратить на "лечение" этого время.
--------------------------------------------------------------------------------
[14] Anatoly Podgoretsky © (27.05.04 13:33)
kaif © (26.05.04 23:42) [11]
Этому товарищу уже много сотен лет
--------------------------------------------------------------------------------
[15] kaif © (27.05.04 20:57)
Вот Danilka © (27.05.04 13:00) [13]
сумел сформулировать то, что я хотел сказать так сумбурно:
То, что, в едиторе будет точка либо запятая зависит от текущей раскладки клавиатуры, а не от выбранных региональных настроек в системе.
Если это побороть на уровне обработки оконных сообщений конкретного приложения - было бы неплохо. Я еще туда не лез, но сдается мне, что все будет печально и у обих точек один и тот же виртуальный код...
Если кто-то знает, что это не так - буду очень благодарен за этот бит информации. Это сэкономило бы мне время...
К тому же не только мне одному может быть это интересно.
--------------------------------------------------------------------------------
[16] Anatoly Podgoretsky © (27.05.04 22:37)
VK_DECIMAL кажется относится только в цифровой клавиатуре, а вот что по нему будет затем получаться будет зависеть от раскладки, текущую раскладку всегда можно узнать.
--------------------------------------------------------------------------------
[17] kaif © (28.05.04 01:20)
2 Anatoly Podgoretsky
Спасибо! Я посмотрю.
Вот, нашел в Help!!!
Действительно,
Virtual Keys:
VK_NUMPAD0 0 key (numeric keypad)
VK_NUMPAD1 1 key (numeric keypad)
VK_NUMPAD2 2 key (numeric keypad)
VK_NUMPAD3 3 key (numeric keypad)
VK_NUMPAD4 4 key (numeric keypad)
VK_NUMPAD5 5 key (numeric keypad)
VK_NUMPAD6 6 key (numeric keypad)
VK_NUMPAD7 7 key (numeric keypad)
VK_NUMPAD8 8 key (numeric keypad)
VK_NUMPAD9 9 key (numeric keypad)
VK_MULTIPLY Multiply key (numeric keypad)
VK_ADD Add key (numeric keypad)
VK_SEPARATOR Separator key (numeric keypad)
VK_SUBTRACT Subtract key (numeric keypad)
VK_DECIMAL Decimal key (numeric keypad)
VK_DIVIDE Divide key (numeric keypad)
Действительно коды с "цифровой клавиатуры" - особенные и наверно что-то можно предпринять. Надо подумать.
--------------------------------------------------------------------------------
← →
Mim1 © (2004-06-14 21:08) [5][3] GuAV © (14.06.04 21:04)
Есть она, просто ее невидно. Кроме как из поиска анкет.
← →
Алексей Петухов (2004-06-18 19:24) [6]Вот мое (при помощи уважаемых мастеров) решение проблемы с русским разделетилем дробной части:
var
is_VK_DECIMAL:boolean;// глобальная переменная
procedure TMainForm.FormCreate(Sender: TObject);
begin
is_VK_DECIMAL:=false;
application.OnMessage:=application_OnMessage;
end;
procedure TMainForm.application_OnMessage(var Msg: tagMsg; var Handled: boolean);
begin
if Msg.message=WM_KEYDOWN then
is_VK_DECIMAL:=(Msg.wParam=VK_DECIMAL);
if Msg.message=WM_CHAR then
if is_VK_DECIMAL then if char(Msg.wParam)<>DecimalSeparator then begin
Msg.wParam:=ord(DecimalSeparator);
is_VK_DECIMAL:=false;
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2004.08.01;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.04 c