'Fliegende' oder 'schwebende' Fenster



  • Hallo,

    habe vor einiger Zeit irgendwo dieses Stichwort aufgeschnappt, kann aber weder hier noch draußen im Netz einen Hinweis dazu finden.

    Folgender Hintergrund:
    Von einer Anwendung aus öffne ich gleichzeitig ein Word-Dokument und eine Sound-Datei (mp3, wav), die miteinander in Beziehung stehen. Dabei wird das Word-Dokument in MS-Word angezeigt, und zur Steuerung der Sounddatei wird ein Mini-Form geöffnet, das nur eine TrackBar-Komponente enthält.

    Funktioniert soweit einwandfrei, ist nur nicht besonders bedienfreundlich, da eben normalerweise immer nur eins von beiden Fenstern im Vordergrund ist.

    Schick wäre eine Lösung, bei der das Mini-Form - ähnlich dem Windows-Task-Manager - immer im Vordergrund 'schwebt' oder 'fliegt'.

    Gruß
    Leo



  • Dem Fenster im Objektinspektor der Eigenschaft FORMSTYLE = fsStayOnTop zuweisen



  • FormStyle = fsStayOnTop, wenn das nicht reicht ueber die WinAPI versuchen und WS_EX_TOPMOST-Style setzen.



  • Hallo,

    fsStayOnTop reicht leider nicht. Könntest Du den Hinweis ...

    Sunday schrieb:

    (...) ueber die WinAPI versuchen und WS_EX_TOPMOST-Style setzen.

    ... etwas näher erläutern!

    Besten Dank!
    Leo



  • warum sollte stayontop nicht funktioniren?
    nix anderes ist die api funktion - nur das das automatisch beim erzeugen des neuen fensters gesetzt wird...

    stayontop funzt - oder du machst was falsch



  • Hallo,

    was mache ich falsch?

    Von einem Haupformular aus rufe ich per Buttonclick das besagte Form wie folgt auf

    MiniForm->ShowModal();
    

    Sobald ich aber irgend ein anderes Programm auswähle (Word, Notepad etc.) ist mein MiniForm nicht mehr sichtbar.

    Gruß
    Leo



  • dasdsad schrieb:

    warum sollte stayontop nicht funktioniren?
    nix anderes ist die api funktion - nur das das automatisch beim erzeugen des neuen fensters gesetzt wird...

    fsStayOnTop hat nichts mit WS_EX_TOPMOST zu tun!

    probiere es so:

    void __fastcall TForm4::FormShow(TObject *Sender)
    {
      // erweiterten Fensterstil setzen um Fenster ganz oben anzeigen zu können
      SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_TOPMOST);
    
      // Fenster in der z-Ordnung ganz nach oben verschieben
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE);
    }
    


  • Hallo,

    super, es funktioniert! Besten Dank!

    Gruß
    Leo


Anmelden zum Antworten