Вниз
Скачать: CL | DM;

Как получить название кнопки?   Найти похожие ветки 

← →
}{enon ©   (2003-04-17 17:32) [0]

В общем, пишу игрушку. Нужно, чтобы управление можно было настраивать (в том числе, на CTRL и т.п.). Проблема в том, что функция GetKeyNameText, которая должна выдавать имя кнопки вызывает системную ошибку по некоторому адресу в user32.dll (!).
Вот код:
procedure Tsettings.keysKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
s: string[20];
begin
getkeynametext(key,^s,20);
end;

Пробовал изменять тип s, но ничего не изменяется. Может кто-то знает, в чем дело? Заранее благодарен!


← →
Игорь Шевченко ©   (2003-04-17 17:55) [1]

procedure Tsettings.keysKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
s: array [0..20] of char;
begin
getkeynametext(key,s,sizeof(s));
end;


← →
}{enon ©   (2003-04-17 18:05) [2]

Спасибо!
Если не трудно, не могли бы объяснить, что не так в моем коде - string это же и есть array of char, но управляемый?


← →
MBo ©   (2003-04-17 18:06) [3]

^s - что за дикость?

Обрабатывай WM_KEYDOWN сам:

var
s: array[0..20] of Char;
begin
getkeynametext(m.lparam,s,20);
caption:=s;


или разберись, как Key образуется из lparam


← →
}{enon ©   (2003-04-17 18:25) [4]

2 MBo
Это не дикость, а аналогия:
type PChar: ^Char (tooltip при наведении на PChar)

Млин... Не работает - в s помещается пустая строка (все символы нулевые)


← →
MBo ©   (2003-04-17 18:40) [5]

}{enon
Я дал рабочий пример. На всякий случай объявление:

procedure WMKeyDown(var m:TMessage); message WM_KeyDown;


← →
}{enon ©   (2003-04-17 18:53) [6]

Если обрабатывать это сообщение, то действительно все работает. Спасибо!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
3-50255
AGAMEMNUM
2003-05-19 13:39
2003.06.16
Как лучше вставить дату


14-50472
Zilog
2003-05-30 10:11
2003.06.16
Хитрые алгоритмы преобразования.


3-50244
udf
2003-05-26 17:06
2003.06.16
при попытке обращения к функции ошибка...


1-50381
1977
2003-06-04 11:37
2003.06.16
Кнопка на панели задач...


1-50278
Tornado
2003-06-04 14:16
2003.06.16
Поолчить разницу между 2-мя датами




   Наверх