Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

Не работает OnKeyDown на клавишу Tab   Найти похожие ветки 

 
galexis ©   (2003-04-29 13:23) [0]

Уважаемые мастера!
Пытаюсь отловить нажатие клавиши Tab в компоненте TComboBox по событию OnKeyDown:
if Key=VK_tab then
begin
....
....
end;

Ничего не происходит. Если например, ставлю VK_RETURN - все работает. Что не так?


 
MBo ©   (2003-04-29 13:24) [1]

если не ошибаюсь, cm_dialogkey лови


 
Skier ©   (2003-04-29 13:26) [2]

>galexis
MBo © (29.04.03 13:24) +
TForm.KeyPreview может понадобится.


 
galexis ©   (2003-04-29 13:29) [3]

>MBo ©
cm_dialogkey тоже не ловится

>Skier ©

А что в TForm.KeyPreview ?


 
Skier ©   (2003-04-29 13:32) [4]

>galexis

> cm_dialogkey тоже не ловится

Лови в форме.

> А что в TForm.KeyPreview ?

F1


 
MBo ©   (2003-04-29 13:36) [5]

>Skier
попробовал - не понадобилось KeyPreview


 
galexis ©   (2003-04-29 13:38) [6]

>Skier © cm_dialogkey в форме тоже не ловится.


 
Skier ©   (2003-04-29 13:40) [7]

>MBo

> попробовал - не понадобилось KeyPreview

для TComboBox-a пробовал ?


 
galexis ©   (2003-04-29 13:44) [8]

В Help написано, что , Navigation keys (Tab, BackTab, the arrow keys, and so on) are unaffected by KeyPreview because they do not generate keyboard events.

Так что, вообще нельзя отловить Tab что ли?


 
Skier ©   (2003-04-29 13:47) [9]

>galexis
А покажи-ка, батенька, свой код.


 
Anatoly Podgoretsky ©   (2003-04-29 13:48) [10]

WM_GETDLGCODE


 
MBo ©   (2003-04-29 13:55) [11]

>Skier
для формы.


 
galexis ©   (2003-04-29 13:57) [12]

>Skier © Так я ж вначале и написал кратенько, но могу написать и что внутри if т.к. это тоже немного

if Key=VK_tab then
begin
ComboBox2.Enabled:=True;
ComboBox2.SetFocus;
end;

Ни при любом из предложенных значениях Key внутрь if не попадает.

>Anatoly Podgoretsky а где использовать WM_GETDLGCODE
?


 
Alexander1966 ©   (2003-04-29 13:57) [13]

Когда-то переделывал для себя с Паскалевского примера (не нашел)

///////////////////
//////// file.h
///////////////////

class TFZakaz : public TForm
{
__published: // IDE-managed Components
..............
__fastcall CMDialogChar(TCMDialogKey& Message);
...........
public: // User declarations
__fastcall TFZakaz(TComponent* Owner);

BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_DIALOGKEY, TCMDialogKey, CMDialogChar);
END_MESSAGE_MAP(TForm);
};


//////////////////////////
//////// file.cpp
//////////////////////////
void __fastcall TFZakaz::CMDialogChar(TCMDialogKey &Message)
{
if(Message.CharCode==VK_TAB) // Если нажато TAB
{
if(edStreet->Focused())
edHouse->Visible=true;
if(edGoods2->Focused())
meDZakaz->Visible=true;
}
TControl::Dispatch(&Message); // Обрабатываем дальше
//Для Pascal: Iherited
}


 
Skier ©   (2003-04-29 14:03) [14]

>MBo © (29.04.03 13:55)
Для формы, конечно, KeyPreview не нужен.

>galexis © (29.04.03 13:57)
procedure TYourForm.CMDialogKey(var Message: TCMDialogKey);
begin
if Message.CharCode = VK_TAB then
ShowMessage("Can you see me now, huh ?!");
inherited;
end;


 
Alexander1966 ©   (2003-04-29 14:13) [15]

Попробуй поиск по слову: CMDialogChar (на этом сайте)


 
galexis ©   (2003-04-29 14:37) [16]

>Alexander1966 ©
>Skier ©
Все равно не работает. Как ее использовать эту процедуру? Откуда ее вызывать?


 
Skier ©   (2003-04-29 14:41) [17]

>galexis
Ещё подсказка : TYourForm.CMDialogKey это перекрытый обработчик сообщения CM_DialogKey


 
galexis ©   (2003-04-29 14:47) [18]

>Skier © Я уже и так понял, что программист я хреновый. Можно ли подробнее, что значит "TYourForm.CMDialogKey это перекрытый обработчик сообщения CM_DialogKey"?


 
MBo ©   (2003-04-29 14:50) [19]

>galexis
в объявлении формы
procedure cmdialogkey(var m:TCMDialogKey);message cm_dialogkey;


 
galexis ©   (2003-04-29 14:54) [20]

Заработала! Всем спасибо. Правда теперь ComboBox2.SetFocus;
не выполняется, но это уже другая история. Спасибо


 
UserMicc ©   (2003-04-29 14:58) [21]


Да нет же, просто надо описать прием message у формы на VK_tab(or something) и проверять, если фокус стоит на предыдущем Combe, то begin
ComboBox2.Enabled:=True;
ComboBox2.SetFocus;
end;


 
MBo ©   (2003-04-29 15:00) [22]

galexis
inherited не забыл?


 
galexis ©   (2003-04-29 15:25) [23]

Да у меня на событие OnExit первого ComboBox много всего наворочено (запрос к БД, заполнение ComboBox2). А это событие вызывается после нажатия Tab. Мне надо было, что если нажата Tab, то выполняется все, что в OnExit, если же из ComboBox ушли с помощью мышки, то OnExit не выполняется.
Попробовал все из OnExit перенести в procedure cmDialogkey, почему то все равно ComboBox2.Enabled:=True; - выполняется, а ComboBox2.SetFocus; - нет.



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

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
14-34569
woffs
2003-04-23 18:59
2003.05.12
Как конвертировать HTML в TXT


14-34583
Style
2003-04-23 21:18
2003.05.12
Зацените музик :)


3-34353
DoPIk
2003-04-22 12:35
2003.05.12
как срубить SQL запрос


3-34344
Evgeny
2003-04-22 12:32
2003.05.12
SQL запрос


1-34451
Петр
2003-04-25 05:53
2003.05.12
Проблема с DLL