Форум: "Основная";
Текущий архив: 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