![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
wm_char [D7, XP]
Creative © (2006-05-18 15:20:00)вопрос очень глупый. вот этот код выводит на экран ASCII коды клавиш. А как сделать, чтобы он выводил собственно буквы?
var
aChar: word;
WM_char:
begin
aChar:= wParam;
case aChar of
97..122:
begin
SetRect(R, 100,150, 400, 180);
invalidateRect(hwnd,nil, false);
end;
end;
end;
WM_PAINT:
begin
DC:= BeginPaint(hwnd, ps);
TextOut(dc, 100, 100, pAnsiChar(Chr(aChar)),length(IntToStr(aChar)));
EndPaint(hwnd, ps);
end;
Причем: сообщение перехватывается нормально, и если в функцию вывода текста на экран подставить просто стринг для примера - он выводится. Но на преобразовании программа затыкается. В чем подвох?
MBo (2006-05-18 15:49:00) [1]var
c: array[0..1] of Char;
WM_char:
begin
c[0] :=Chr(wParam);
c[1] :=#0;
...
TextOut(dc, 100, 100, c, 1);
Игорь Шевченко (2006-05-18 15:46:00) [2]
> TextOut(dc, 100, 100, pAnsiChar(Chr(aChar)),length(IntToStr(aChar)));
>
>
TextOut(dc, 100, 100, pAnsiChar(Chr(aChar)),SizeOf(Char));
ANB (2006-05-18 15:45:00) [3]
> SetRect(R, 100,150, 400, 180);
> invalidateRect(hwnd,nil, false);
Зачем генерить рект, если потом ты его нигде не используешь ?
Кстати, WM_PAINT имеет особенность срабатывать не только тогда, когда ты его заинвалидейтишь.
ANB (2006-05-18 15:43:00) [4]
> Creative (18.05.06 15:35) [2]
Запости весь код и посмотри отладчиком - где вылетает.
Creative (2006-05-18 15:35:00) [5]> ANB © (18.05.06 15:24) [1]
> S := Char(aChar);
> TextOut(dc, 100, 100, PChar(S),length(S));
а при таком раскладе программа просто вылетает
ANB (2006-05-18 15:24:00) [6]
> IntToStr
Чего хотел, то и получил.
S := Char(aChar);
TextOut(dc, 100, 100, PChar(S),length(S));