Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.064 c
1-1090292484
Phoenix
2004-07-20 07:01
2004.08.01
ListView, как изменить значение субсубсуб итема?


14-1089373794
_DS
2004-07-09 15:49
2004.08.01
Библиотека


4-1087311145
Антон
2004-06-15 18:52
2004.08.01
Управление "чужим таймером"?


1-1089707283
Shc
2004-07-13 12:28
2004.08.01
Как сделать инспектор объектов?


3-1087832937
ceval
2004-06-21 19:48
2004.08.01
DBGrid показено только несколько полей,а как другие поля таблицы