Форум - Ответы     (  К темам )
 ?  Михаил: Активация нужной MDI Формы. (05-04-2003 00:13:54)
Как сделать так, чтобы при открытии нескольких дочерних окон можно была активировать нужное дочерние окно (Например при нажатие кнопки ToolButton1 на родительской форме) . Это должно работать по прицепу как работает Microsoft Word Меню Окна. Мне нужен пример активации. Через само меню, где создаются его пункты автоматически мне не надо. (Builder C++)
 Владимир (06-04-2003 13:12:29) http://cbuilder.ru
При создании форм окна индексируются в порядке их создания, последнее созданное имеет индекс 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, тогда, конечно, проблем нет :)


support@cbuilder.ru