Forms - auch zusätzliche Forms in der Taskleiste anzeigen



  • Hallo!

    Ich habe ein Programm mit zwei Forms. Nun will ich, dass das zweite auch in der Taskleiste angezeigt wird, wenn es geöffnet wird.
    Weiß jemand, wie das geht?

    yanni

    [ Dieser Beitrag wurde am 12.03.2002 um 17:39 Uhr von Jansen editiert. ]



  • Also, ich glaube, das geht nicht! Nur die Applikation selbst hat ein Taskbar-Button. Du kannst allerdings das Handle der Taskbar rausbekommen (classname: BaseBar) und dann einen Button hinzufügen. Mit Hooks kannste dann die Funktionalität des Buttons angeben. Frag mich aber bloß nicht, wie das geht! Vom Prinzip her müßte es aber eigentlich gehen.



  • Sind mit "Forms" Fenster gemeint ?
    Falls ja, bei "CreateWindowEx" WC_EX_APPWINDOW als Extended Style angeben.

    [ Dieser Beitrag wurde am 14.01.2002 um 09:24 Uhr von geeky editiert. ]



  • Vielen Dank für Deinen Tipp, aber ich kenn mich einfach noch zu wenig aus, um das ganze anzuwenden. Kannst du mir vielleicht etwas genauer sagen, wie man das im C++Builder macht?

    Vielen Dank im voraus,
    yanni



  • Also wenn du nur mit der WinAPI programmierst und du deine Fenster mit CreateWondowEx erstellt, gibst du im ersten Parameter den oben genannten Stil an. Wie das jetzt mit der VCL aussieht weiß ich auch nicht.



  • Hi,

    @ geeky : wenn schon dann WS_EX_APPWINDOW

    Hier ein Beispiel:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      LONG MyGWL_EXSTYLE = GetWindowLong(Form2->Handle, GWL_EXSTYLE);
      SetWindowLong(Form2->Handle, GWL_EXSTYLE, MyGWL_EXSTYLE | WS_EX_APPWINDOW );
      Form2->Show();
    }
    //---------------------------------------------------------------------------
    

    Edit:

    andere Möglichkeit:

    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    
    private:    
    public:     
      __fastcall TForm1(TComponent* Owner);
      virtual void __fastcall CreateParams(TCreateParams &Params)
      {
        TForm::CreateParams(Params);
        Params.ExStyle |= WS_EX_APPWINDOW ;
      }
    }
    

    [ Dieser Beitrag wurde am 18.01.2002 um 23:37 Uhr von AndreasW editiert. ]

    [ Dieser Beitrag wurde am 28.07.2002 um 08:54 Uhr von Jansen editiert. ]



  • Wenn Ihr die Styles erst nachträglich per SetWindowLong() ändert, dann müsst Ihr danach auch noch SetWindowPos() aufrufen. Zitat MSDN:

    If you have changed certain window data using SetWindowLong, you must call SetWindowPos to have the changes take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

    Außerdem sollten neuere Anwendungen SetWindowLongPtr() anstelle von SetWindowLong() benutzen:

    Note This function has been superseded by the SetWindowLongPtr function. To write code that is compatible with both 32-bit and 64-bit versions of Windows, use SetWindowLongPtr.



  • Hi,
    @King: "SetWindowPos" ->Was soll das bringen ?

    "Form2->Show" aktualisiert sowieso alles was mit dem Fenster zu tun hat.. images/smiles/icon_rolleyes.gif



  • SetWindowPos() sorgt in diesem Falle dafür, daß das Fenster nach der Änderung der Styles auf jeden Fall richtig dargestellt wird. Und das wird schon seine Berechtigung haben, sonst würde MS nicht so klar und deutlich darauf hinweisen. Oder?

    "Form2->Show" sieht mir irgendwie nicht nach API aus. Aber wenn das intern SetWindowPos() aufruf, dann ist's ja gut. 😉



  • "Form2->Show" sieht mir irgendwie nicht nach API aus

    -> C++-Builder

    aber ich werds mal unter die Lupe nehmen images/smiles/icon_wink.gif



  • Super! Der Vorschlag von Andreas funkt! Ich hatte auch schon mit SetWindowLong rumprobiert, hatte aber das Flag GWL_EXSTYLE übersehen. Hatte stattdessen nur GWL_STYLE genommen, was mit WS_EX_APPWINDOW als extended style natürlich nicht funktioniert! Die Methode Show setzt also auch die Position des Fensters neu!



  • Hi!
    Jetzt hab ich's endlich auch geschafft. images/smiles/icon_smile.gif
    Also vielen Dank!

    yanni


Anmelden zum Antworten