Форум — Ответы     (  К темам )
 ?  Михаил: Активация нужной MDI Формы. (05-04-2003 00:13:54)
Как сделать так, чтобы при открытии нескольких дочерних окон можно была активировать нужное дочерние окно (Например при нажатие кнопки ToolButton1 на родительской форме) . Это должно работать по прицепу как работает Microsoft Word Меню Окна. Мне нужен пример активации. Через само меню, где создаются его пункты автоматически мне не надо. (Builder C++)
 Владимир (06-04-2003 13:12:29)
При создании форм окна индексируются в порядке их создания, последнее созданное имеет индекс 0. Свойство MDIChildren[i] дает доступ к i-му окну. Закрыть из родительской формы некое дочернее окно: MDIChildren[i]->Close(); Тоже самое и с активацией нужного окна, например так: (FDoc — имя fsMDIChild формы)
//---------------------------------------------------------------------------
// создаем новый документ, добавляем его в TListBox
void __fastcall TForm1::Button1Click(TObject *Sender)
{
static int num = 0;
TFDoc* FDoc = new TFDoc(this);
if( !FDoc) return;
FDoc->Caption = "Документ "+IntToStr(MDIChildCount);
FDoc->Tag = num;
ListBox1->Items->AddObject(FDoc->Caption, (TObject*)num);
num++;
FDoc->Show();
}
//---------------------------------------------------------------------------
// устанавливаем фокус выбранному в ListBox1 документу
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int n = (int)ListBox1->Items->Objects[ListBox1->ItemIndex];
for(int i=0; i < MDIChildCount; i++){
if(MDIChildren[i]->Tag == n) { MDIChildren[i]->Show(); break; }
}
}
//---------------------------------------------------------------------------

 Alexander (07-04-2003 11:11:10)
Есть одно замечание. Это сначала они с такими номерами, по созданию. При выборе дочернего окна оно становится MDIChildren[0].
Но если запихать его номер в tag, тогда, конечно, проблем нет :)