Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Вниз

Как отследить нажатие курсорных клавиш?   Найти похожие ветки 

 
Vasiliy   (2003-05-11 21:02) [0]

В компоненте, порожденной от TCustomControl, необходимо отследить нажатие курсорных клавиш. Что только не пробовал, в итоге только фокус передается другой компоненте.


 
nevalex   (2003-05-11 22:12) [1]

попробуй добавить события OnKeyDown...итд
вот исходник компанента составленый мной в риал тайме


uses Windows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,ExtCtrls, ComCtrls, StdCtrls,Buttons, Grids;
type
TMyCusControl=class(TCustomControl)
published
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Samples", [TMyCusControl]);
end;
end.


Инсталируй и пользуйся!


 
Vasiliy   (2003-05-11 22:59) [2]

В моем компоненте OnKeyDown, OnKeyPress, OnKeyUp, реализованы и работают замечательно, только вот не на те клавиши :(
Курсорные игнорируются хоть убей.
TabStop:=True пробовал, без результата.
Пробовал и из API WM_KeyDown, WM_SYSKeyDown, CM_DialogKey, результат :=0
Hook вешать нехочется, да и Application.OnMessage как то не применимо для компонента.
Вобщем совсем себе голову заморочал :(


 
nevalex   (2003-05-11 23:50) [3]

Слушай я тоже пробывал в Delphi7 но без результатно
у меня вообще не на какие не пашет
А что тибе именно надо можеть можно другим компаненнтом


 
Юрий Зотов   (2003-05-11 23:52) [4]

> Vasiliy

Попробуйте добавить обработчик WM_GETDLGCODE, а в нем после inherited:

with Message do Result := Result or DLGC_WANTARROWS;

После этого, по идее, курсорные клавиши должны обрабатываться обычным образом.



 
Vasiliy   (2003-05-12 18:34) [5]

Спасибо Юрий, выручил.

public
procedure DefaultHandler(var Message); Override;

procedure TМой_Компонент.DefaultHandler(var Message);
begin
With TMessage(Message) do Result:=Result or Dlgc_WantArrows;
end;

после этого KeyDown отслеживает курсорные клавиши как миленький.


 
Юрий Зотов   (2003-05-12 18:45) [6]

Я имел в виду не совсем это. Не нужно трогать DefaultHandler, опасное это дело. Лучше так:

private
procedure WMGetDlgCode(var Message: TMessage); message WM_GETDLGCODE;

....

procedure TМой_Компонент.WMGetDlgCode(var Message: TMessage);
begin
inherited;
with Message do Result := Result or DLGC_WANTARROWS
end;

Этот код дает возможность контролу получать сообщения о нажатии курсорных клавиш и обрабатывать их. А сам обработка стандартная, он уже зашита в VCL. Поэтому начинают работать и события, и методы их диспетчеризации.


 
Vasiliy   (2003-05-12 19:04) [7]

Хвала МАСТЕРУ Юрию Зотову.
В Pascal под DOS у меня большой опыт, а вот с Delphi начал общатся недавно, был солидный перерыв в программировании, лет эдак шесть.
Не подскажешь где можно в нете почитать о событиях и методах их диспетчеризации в Windows, для меня юто пока больной вопрос.


 
Юрий Зотов   (2003-05-12 19:45) [8]

> Vasiliy (12.05.03 19:04)

Пожалуйста, не надо таких громких слов. Только на одном этом сайте найдется, как минимум, десяток человек, у которых и мне еще во многих областях нужно учиться и учиться. Уже не говоря о действительно корифеях, истинных системщиках. Неудобно, понимаете?

Что касается событий и методов диспетчеризации (и не только их, так как здесь многое взаимосвязано)... Где в Инете - не знаю, а вот книги могу подсказать.

1. Рэй Конопка. Разработка оригинальных компонент в среде Delphi. Очень рекомендую. И даже не столько для того, чтобы делать свои компоненты, а чтобы вообще понять, что такое Delphi, VCL и с чем их едят. Выпускалась эта книга давно, но, говорят, в Киеве она есть. Советую задействовать все свои связи и приложить все усилия, чтобы ее все же купить. Она того стоит. Даже несмотря на то, что она еще про Delphi 1. Актуальность она от этого не потеряла.

2. Стив Тейксейра, Ксавье Пачеко. Delphi X для разработчиков. (где X - номер версии). Лучшей книги по Delphi в целом я просто не знаю. Года три назад сама Борланд признавала ее лучшей книгой года. Есть в продаже (по крайней мере, в Москве). Стоит недешево, но платить есть за что. По крайней мере, это более выгодная покупка, чем книги, в которых рассказывается о том, как таскать компоненты по форме.

3. Книги по Windows и API. Дело в том, что многие события VCL - это как бы "оболочка" вокруг сообщений Windows (которые поэтому являются как бы "движком" этих событий - и проблема, с которой Вы столкнулись, весьма ярко это иллюстрирует). Для неискушенных в этом вопросе можно посоветовать серию книг Павла Румянцева. Написаны они в стиле "просто о сложном", чем и хороши. Примеры там на Си (что для книг по Windows - вполне обычное явление), но глубоких знаний языка они не требуют, разобраться можно без проблем. Да и главное в них - это принципы и концепции, а вовсе не код (тем более, что код вызовов функций API на Си и на Паскале почти ничем не отличается).



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

Форум: "Основная";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.014 c
3-70099
chegevara
2003-04-29 14:56
2003.05.22
xml или ...


1-70278
wwwasya
2003-05-12 17:35
2003.05.22
Application.CreateForm vs TForm.Create


1-70261
Тот самый Джо
2003-05-12 12:04
2003.05.22
Помогите написать конвертор


7-70547
mmmh
2003-03-24 22:24
2003.05.22
Подскажите как извлеч файл из архива который запоролен. То есть


14-70511
NA
2003-05-05 00:28
2003.05.22
Рандомизация всей страны, или Хаотичные движения мышью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский