![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чё за обработчик OnChar [Delphi, Windows]
Ciber SLasH © (2003-11-13 08:02:00)Мне нужно было, чтоб моя прога закрывалась по <Esc>, я смотрел список обработчиков в KOL-форме, так и не нашёл обработчика OnKeypress. Нашёл OnChar, а что он делает так и не понял.
Народ помогите плиз, сделать так, чтобы прога закрывалась по <Esc>.
Gandalf (2003-11-14 17:08:00) [1]Первый способ мне явно импонирует больше. Если обработку навесить на KOLForm, то следующий KOL эмитирует VCL KeyPreview:
function TForm1.KOLApplet1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
var C : Char;
begin
Result := False;
case Msg.message of
WM_KEYDOWN, WM_SYSKEYDOWN:
if assigned( Form.OnKeyDown ) then
Form.OnKeyDown( Form, Msg.wParam, GetShiftState );
WM_KEYUP, WM_SYSKEYUP:
if assigned( Form.OnKeyUp ) then
Form.OnKeyUp( Form, Msg.wParam, GetShiftState );
WM_CHAR, WM_SYSCHAR:
if assigned( Form.OnChar ) then
begin
C := Char( Msg.wParam );
Form.OnChar( Form, C, GetShiftState );
Msg.wParam := Integer( C );
end;
end;
end;
Vladimir Kladov (2003-11-13 19:58:00) [2]Кроме скрытых менюшек, есть еще Applet.OnMessage. И еще вариант: одинаковый обработчик OnChar/OnKeyDown/OnKeyUp - на выбор - у всех контролов на форме.
Ciber SLasH (2003-11-13 17:00:00) [3]А как же тогда сделать ?
SPeller (2003-11-13 16:35:00) [4]
> Тока что создал новую форму - OnChar работает.
> А в проге которую создал чуть позже - не работат !
Потому что фокус в первом случае был у формы, а во втором у какого-то контрола. Это недочёт КОЛа. Как вариант - можно использовать скрытые менюшки. Только это уже извращением будет.
Ciber SLasH (2003-11-13 14:58:00) [5]Блин а чё у меня ничего не получается !
Тока что создал новую форму - OnChar работает.
А в проге которую создал чуть позже - не работат !
Может поможите, я исходники вышлю.
Gandalf (2003-11-13 14:39:00) [6]Во первых надо писать
procedure TForm1.KOLForm1Char(Sender: PControl; var Key: Char;
Shift: Cardinal);
begin
if Key = #27 then
Form.Close;
end;
Во вторых в KOL нет KeyPreview - форма должна быть активной чтобы к ней клавиша пришла.
Ciber SLasH (2003-11-13 14:20:00) [7]//OnChar - это и есть OnKeyPress, для тебя Key = #27
Так почему же тогда он не работает ?
Я вписывал туда код: if Char = #27 then
Close;
ставлю бряк на строку if ... then дебаггер даже не останавливается -> форма не закрывается !
mike.dld (2003-11-13 12:18:00) [8]OnChar - это и есть OnKeyPress, для тебя Key = #27
Ciber SLasH (2003-11-13 11:59:00) [9]Я пробовал на OnKeyDown (это типа на нажатие пимпы), но ничего не сработало :(
И всё же, чё за обработчик такой: OnChar ?
savva (2003-11-13 10:52:00) [10]а на OnKeyUp почему не завязаться? в твоем случае key=27 (вроде:))