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

Вниз

Не работает 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
1-34441
Плохой человек
2003-04-28 23:38
2003.05.12
Про динамическое создание компонентов.


11-34385
Линда
2002-08-11 20:07
2003.05.12
Есть ли в KOL компонента для отправки сообщение


4-34651
demonyator
2003-03-10 00:40
2003.05.12
Подскажите как определить имя exe шника имея Handle


1-34417
dinamyc
2003-04-28 14:47
2003.05.12
перевод


14-34553
Soft
2003-04-18 17:54
2003.05.12
Иная Реальность





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский