TForm прячется за главным окном

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

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-Windows, она появляется перед Form2.
Но когда я нажимаю Form2, он остается за Главным.
Кроме того, когда Form2 делает предупреждение, закрытие предупреждения будет фокусироваться на Main вместо Form2.

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

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

0

Решение

Почему ты создаешь 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);
2

Другие решения


По вопросам рекламы [email protected]