C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
2 StringGrid'а, И Tab между ними
Aptem
Отправлено: 24.10.2003, 07:48


Мастер участка

Группа: Участник
Сообщений: 349



Привет, ВСЕМ !

У меня на форме 2 StringGrid'а. Как сделать так, чтобы при нажатии на клавишу табуляции синяя полоска выделения исчезала в одном гриде и появлялась в другом и наоборот ?

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

Помогите !

Спасибо за внимание !
Admin
Отправлено: 24.10.2003, 22:01


Владимир

Группа: Администратор
Сообщений: 1190



Возможно что-то немного не так делаю, поправьте если что
но работает

В Unit1.h:
CODE

private: // User declarations
       void __fastcall CMDialogKey(TCMDialogKey& Message);
public:  // User declarations
       __fastcall TForm1(TComponent* Owner);
       BEGIN_MESSAGE_MAP
       MESSAGE_HANDLER(CM_DIALOGKEY, TCMDialogKey, CMDialogKey)
       END_MESSAGE_MAP(TForm)


-----
В Unit1.cpp:

CODE

void __fastcall TForm1::CMDialogKey(TCMDialogKey& Message)
{
 if(Message.CharCode != VK_TAB);//inherited
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1KeyDown(TObject *Sender, WORD &Key,
     TShiftState Shift)
{
  if(Key == VK_TAB) Form1->Caption = "Tab Key Down 1 !";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid2KeyDown(TObject *Sender, WORD &Key,
     TShiftState Shift)
{
  if(Key == VK_TAB) Form1->Caption = "Tab Key Down 2!";
}
//-----------------------------------------------
Admin
Отправлено: 24.10.2003, 22:45


Владимир

Группа: Администратор
Сообщений: 1190



Немного изменил код, чтобы TAB вне StringGrid 1 2 работали:

В Unit1.h:

CODE

private: // User declarations
void __fastcall CMDialogKey(TCMDialogKey& Message);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_DIALOGKEY, TCMDialogKey, CMDialogKey)
END_MESSAGE_MAP(TForm)
};


В Unit1.cpp

CODE

//---------------------------------------------------------------------------
void __fastcall TForm1::CMDialogKey(TCMDialogKey& Message)
{
if(Message.CharCode != VK_TAB ||
(ActiveControl != StringGrid1 && ActiveControl != StringGrid2))
TForm::Dispatch(&Message);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == VK_TAB){
Key = 0;
StringGrid2->SetFocus();
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid2KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == VK_TAB){
Key = 0;
StringGrid1->SetFocus();
}
}
//----------------------------------


Отредактировано Admin — 25/10/2003, 12:23

Вернуться в Вопросы программирования в C++Builder