Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чё за обработчик 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 (вроде:))


Наверх

Титульная страница Поиск, карта сайта Написать письмо