![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять - DeсimalSeparator???
SKing © (2002-03-26 13:42:00)Мастера помогите - пожалуйста...
Как заставить кнопку "." на доп. клавиатуре выдавать DeсimalSeparator во всех формах приложения при любой языковой раскладке?
Только не надо советовать для каждого контрола в отдельности.
Юрий Зотов (2002-03-27 15:46:00) [21]> Alx2
> Fay
Читаем вопрос. Там сказано: "... во всех формах приложения...".
Предположим, в проекте 100 форм. Вы предлагаете править все 100 вручную?
Fay (2002-03-27 12:37:00) [22]2Alx2
Угу
Alx2 (2002-03-27 12:30:00) [23]>Fay © (27.03.02 12:16)
Просто если key = DecimalSeparator, то ее не надо переприсваивать снова значению DecimalSeparator.
А запятую туда вставил, потому что с клавиши "." может прийти либо "." либо ","
Fay (2002-03-27 12:16:00) [24]2Alx2
А "," зачем ?
Юрий Зотов (2002-03-27 12:10:00) [25]Можно. Но я придерживаюсь принципа "надо давать не рыбу, а удочку", поэтому расскажу как я сам это делаю.
Открываем хелп на странице TApplication, щелкаем по линку Events, читаем. В боковом окне щелкаем по линку OnMessage, снова читаем. Потом в основном окне щелкаем по линку Example, смотрим пример. Копируем его к себе в программу и подправляем код под свои нужды. Для этого в том же хелпе смотрим объявление типа TMsg, а в SDK - сообщения WM_KEYDOWN, WM_KEYUP, WM_CHAR и страницу Virtual-Key Codes.
Написанный нами обработчик, конечно, сразу правильно работать не будет и это вполне нормально. Ставим в нем BreakPoint, запускаем программу, нажимаем нужные клавиши, смотрим значения переменных, выясняем, что у нас не так и исправляем. В частности, выясняем, как нужно изменить в сообщении WParam и биты 16-23 в LParam, чтобы "подменить" клавишу.
Вот так я это делаю и (честное слово!) еще ни разу не было, чтобы решение не было найдено. Чего и Вам желаю.
Alx2 (2002-03-27 11:57:00) [26]if Key in [",",".", DecimalSeparator- зачем?!] then Key := DecimalSeparator
Fay (2002-03-27 11:55:00) [27]2Alx2
if Key in [",",".", DecimalSeparator] then Key := DecimalSeparator
Alx2 (2002-03-27 11:30:00) [28]Пардон, вот так:
if Key in [",","."] Then Key := DecimalSeparator;
Alx2 (2002-03-27 11:29:00) [29]делаем) Form1.KeyPreview = true
И добавляем метод
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key in [",","."] Then Key := ".";
end;
Reindeer Moss Eater (2002-03-27 11:10:00) [30]>SKing
А если все сто форм приложения сделать наследниками одной и обработку делать в ней?
SKing (2002-03-27 11:05:00) [31]Вадиму-> Это для одной формы, а если форм в прилож. 100 ?
Юрию Зотову-> Если не трудно, можно поподробней...
Johnmen (2002-03-26 14:08:00) [32]Можно хирургически - заменить "," на "." в kbdru.kbd в нужном месте - тогда будет всегда "."
Можно прописать в приложении обработчик <Del> и делать, что надо...
Юрий Зотов (2002-03-26 14:03:00) [33]Например, написать обработчик Application.OnMessage, а там проверять, что нажато и подменять код клавиши, если нужно.
Вадим (2002-03-26 13:59:00) [34]А если для каждого контрола использовать одну процедуру