2014-10-02 2 views
0

У меня есть основная форма, созданная с помощью OwlNext, которая вызывает диалог, созданный в vcl.TForm скрывается за Главным окном

MyOtherFormClass Form2=new Form2(); 
void MyMainForm::ShowForm2(void) { 
    Form2->ShowDialog(this); 
} 
class MyOtherFormClass { 
    [...] 
    TForm *myForm; 

    void ShowDialog(TWindow* parent){ 

    TForm* tf = new TForm((HWND)NULL); 
    tf->ParentWindow=parent->Handle; 

    myForm= new TForm(tf); 
    myForm->Parent=tf->Parent; 
    myForm->Caption = "Form2"; 
    myForm->Height = 950; 
    myForm->Width = 1350; 
    myForm->BorderIcons << biMinimize << biMaximize << biSystemMenu; 
    myForm->BorderStyle = bsSizeable; 
    myForm->Show(); 
} 
} 

Теперь у меня есть оба окна с новой панелью задач.
Когда я нажимаю Main-WIndow, он появляется перед Form2.
Но когда я нажимаю Form2, он остается за Главным.
Также, когда Form2 делает предупреждение, закрытие предупреждения будет фокусировать Main вместо Form2.

MessageBox(NULL, "An Alert!", "!", MB_OKCANCEL) 

Можете ли вы сказать мне, что я сделал не так?

ответ

2

Почему вы создаёте 2 TForm объектов? Вам нужно только 1.

tf->Parent является NULL, поскольку tf->ParentWindow используется (Кстати, вы можете передать parent->Handle в TForm(HWND) конструктора), так myForm не имеет родительского окна назначенного, просто Владелец, что вы не отслеживание. Владелец и родитель - это две разные вещи. Вероятно, вы хотите, чтобы MainForm был родителем окна Form2.

Что касается вашего звонка MessageBox(), вы не дадите ему окно владельца. Вам нужно сделать это, чтобы он знал, какое окно останется впереди, и что еще более важно, какое окно нужно сосредоточить, когда оно закроется.

Попробуйте вместо этого:

MyOtherFormClass *Form2 = new MyOtherFormClass(); 

void MyMainForm::ShowForm2(void) { 
    Form2->ShowDialog(this); 
} 

class MyOtherFormClass { 
    //... 
    TForm *myForm; 

    void ShowDialog(TWindow* parent) { 
     myForm = new TForm(parent->Handle); 
     myForm->Caption = "Form2"; 
     myForm->Height = 950; 
     myForm->Width = 1350; 
     myForm->BorderIcons = TBorderIcons() << biMinimize << biMaximize << biSystemMenu; 
     myForm->BorderStyle = bsSizeable; 
     myForm->Show(); 
    } 
}; 

MessageBox(myForm->Handle, "An Alert!", "!", MB_OKCANCEL); 
+0

в основном это работает, но я предполагаю, что MainWindow существо МДИ-окно может быть проблема ... теперь "ребенок" -window является в главном окне ... Я также попробовал parent-> Parent-> Handle, но теперь он все еще находится в этом окне, но над панелью инструментов ... есть ли какое-либо свойство, чтобы сказать myForm не MDI-Child? ^^ – Julian

+0

Если вы хотите, чтобы 'myForm' был свободно плавающим, не назначайте никакого родительского окна вообще. –

+0

Ну, если я даю (HWND) NULL как параметр, форма остается за основной формой, когда я нажимаю на нее в панели задач ... – Julian

Смежные вопросы