2014-10-02 3 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를 클릭하면 Main 뒤에 유지됩니다.
또한 Form2가 경고를 표시하면 경고를 닫으면 Form2 대신 Main이 포커스를받습니다.

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

여기 내가 뭘 잘못했는지 말해 줄 수 있습니까?

답변

2

왜 2 TForm 개체를 만드나요? 당신은 너무 myForm는 할당 된 부모 윈도우, 당신을 추적하지 않습니다 단지 소유자가없는, (BTW, 당신은 TForm(HWND) 생성자에 parent->Handle를 전달할 수 있습니다) tf->ParentWindow가 사용되기 때문에 1

tf->Parent이 NULL이 필요합니다. 소유자와 부모는 서로 다른 두 가지입니다. 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

대부분 작동,하지만 지금은 "아이"-window은 ... 문제가 될 수있는 MDI 창을되는 MainWindow를 추측 :

대신 시도 메인 윈도우 내에서 ... 또한 부모 -> 부모 -> 핸들을 시도했지만, 이제는 여전히 그 윈도우 내에 있지만 툴바 위에 있습니다 ... myForm에 MDI-Child가 아님을 알리는 속성이 있습니까? ^^ – Julian

+0

'myForm'을 free-floating으로하고 싶다면 부모 창을 전혀 할당하지 마십시오. –

+0

글쎄, 매개 변수로 (HWND) NULL을 지정하면, 폼은 태스크 바에서 클릭 할 때 메인 폼 뒤에 머물러 있습니다 ... – Julian