Positionieren eines OpenFile-Dialogs



  • Hallo BCB-Freunde,
    Seit kurzem arbeite ich mit zwei Monitoren. Wenn ich nun eines meiner Programme auf den zweiten Monitor verschiebe und eine Datei öffnen will, so erscheint der Dialog im ersten Monitor.
    Windows behandelt die beiden Monitore so, als wäre es ein Monitor mit doppelter Breite. Ich kann also ein Fenster so verschieben, dass es je zur Hälfte auf beiden Bildschirmen zu sehen ist.
    Unabhängig von der Zwei-Monitor-Situation könnte ich meine Frage so formulieren:
    Ist es möglich, den "OpenFile"-Dialog relativ zu den Koordinaten des Hauptfensters zu positionieren?
    Mit einem selbst geschriebenen Dialog ist das kein Problem, z.B.:
    DLGForm->Left=Form1->Left;
    DLGForm->Top=Form1->Top;
    int res = DLGForm->ShowModal();
    ...
    Bei den Standard-Dialogen stehen "Left" und "Top" nicht zur Verfügung. Deshalb habe ich es mit "SendMessage(...WM_MOVE..)" versucht. Auch "MoveWindow()" bewirkt nichts.

    Günter(Kyriakos).



  • kyriako schrieb:

    Windows behandelt die beiden Monitore so, als wäre es ein Monitor mit doppelter Breite.

    Du könntest Dir mal UltraMon anschauen. Wenn dort ein Fenster maximiert wird, dann nur auf einem Monitor.



  • Hi
    Der TOpenDialog kapselt meines Wissens den "Standard-Filerequester"
    Benutze doch einfach WinApi.
    Damit sollte die volle Kontrolle möglich sein...

    wNw



  • Wo hast du denn SendMessage() bzw. MoveWindow aufgerufen?
    Probier dies mal im TOpenFile::OnShow - Ereignis.



  • http://entwickler-forum.de/showthread.php?p=171194
    Es ist nicht besonders effizient, eine Frage in mehreren Foren gleichzeitig zu stellen.



  • void __fastcall TForm1::OpenDialog1Show(TObject *Sender)
    {
      TRect r;
      GetWindowRect(GetParent(OpenDialog1->Handle), &r);
      MoveWindow(GetParent(OpenDialog1->Handle),
                 100, 100, r.right - r.left,
                 r.bottom - r.top, true );
      Abort();
    }
    

    Quelle

    PS.
    Ohne CallWindowProc und sonstigen Schnulli ... 😉


Anmelden zum Antworten