iAlexander |
Отправлено: 31.07.2003, 14:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Вообще решение известно, если такое нужно сделать лишь для одной формы:
Делаем KeyPreview форм true, пишем обработчик OnKeyPres:
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if (Key == VK_RETURN)
{
SelectNext(AddDataClient->ActiveControl, true, true);
Key = 0;
};
}
Теперь хочется сделать тоже самое для всех форм в одном месте!
Пишем что-то вроде
void __fastcall TMainForm::KeyEnterPress(TObject *Sender, char &Key)
{
TForm *MeForm;
MeForm = dynamic_cast(Sender);
if (Key == VK_RETURN)
{
((TWinControl*)Sender)->SelectNext(((TForm *)Sender)->ActiveControl, true, true); // упс, TWinControl::SelectNext недоступен
Key = 0;
};
}
И при создании главной формы
// проинициализировать все формы
TForm *CurrForm;
for (int i = 0; i < Application->ComponentCount; i++) {
// если это форма
if (CurrForm = dynamic_cast(Application->Components[i])) {
// то установим ее OnKeyPress
CurrForm->KeyPreview = true;
CurrForm->OnKeyPress = MainForm->KeyEnterPress;
};
};
(Asher, привет )
Так вот, можно ли все-таки сделать доступным этот SelectNext()? |
|
Asher |
Отправлено: 31.07.2003, 15:58 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет, привет
Станный какой-то у тебя dynamic_cast — он вроде в Help'у описан как dynamic_cast< T> (ptr), то-есть требует явного указания типа, к которому производится присвоение, то есть твой код должен был бы выглятеть так:CODE | TForm *MeForm = dynamic_cast<TForm*>(Sender);//
if ((Key == VK_RETURN) && MeForm){
MeForm->SelectNext(MeForm->ActiveControl, true, true);
Key = 0;
}
|
но похоже что метод SelectNext — protected, так что в таком виде его вызвать не удасться. Придется вызывать п/п формы в которой уже будет внутренний SelectNext(this->ActiveControl, true, true); что убивает всю идею централизованной п/п
|
|
iAlexander |
Отправлено: 31.07.2003, 16:18 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
[QUOTE]Станный какой-то у тебя dynamic_cast — он вроде в Help'у описан как dynamic_cast< T> (ptr)[QUOTE]
Извиняюсь. Теги не вписались в форум, т.е. dynamic_cast обрубился именно форумом, а не моим воспаленным воображением.
Т.е. коммунизма не получится? |
|
Asher |
Отправлено: 31.07.2003, 16:29 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
А....
я тогда тоже извияняюсь за то что плохо подумал
Выходит так что SelectNext по простому не 'расшаривается'
|
|