Verstecken Taskleiste Schaltfläche Form ohne WS_EX_TOOLWIN mit
Frage
Ich brauche ein Windows-Formular aus der Taskleiste zu verbergen, aber ich kann nicht WS_EX_TOOLWINDOW
benutzen, weil ich das Systemmenü und Min- / Max-Tasten auf der Form der Titelleiste benötigen.
Wenn ich das Formular an ein Werkzeugfenster zur Laufzeit der Form Häutung wird der Schalter verstopft. Von der Suche im Web sehe ich, dass VB eine ShowInTaskbar Eigenschaft hat und ich frage mich, ob dies tun würde, was ich will, und ob es 2006 in Delphi implementiert werden kann, auch dieses Projekt ist ein COM-Server und hat keine Mainform usw.
Lösung
Es ist eine interessante Diskussion über dieses genaue Problem hier (von VB6 persepective).
Das relevanteste Bit aus Ihrer Frage der Perspektive ist:
"Wenn Sie ein Fenster erstellen, die Taskleiste untersucht die erweiterten Stil des Fensters zu sehen, ob entweder die WS_EX_APPWINDOW (& H40000) oder WS_EX_TOOLWINDOW (& H80) Stil eingeschaltet ist. wenn WS_EX_APPWINDOW eingeschaltet wird, wird eine der Taskleiste zeigt Taste für das Fenster, und wenn WS_EX_ Werkzeugfenster eingeschaltet ist, in der Taskleiste keine Taste für das Fenster anzuzeigen. Ein Fenster sollte nie beide haben diese erweiterten Stile. Wenn das Fenster nicht eine dieser beiden Arten, die Taskleiste entscheidet eine Schaltfläche erstellen wenn das Fenster nicht im Besitz befindlichen und nicht eine Schaltfläche erstellen, wenn das Fenster gehört.“
Im Übrigen verwenden Sie die GetWindow API-Funktion mit dem Flag auf GW_OWNER bestimmen, ob ein Fenster gehört.
Andere Tipps
Dank Stu für mich setzen, um die Antwort auf so schnell. In meinem Fall hatte ich die besitzende Form des Griffs in die CreateParams manuell hinzufügen, aber das kann in andere / Normalfall nicht erforderlich.
procedure TfrmWord2Site.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := <your owner form>.Handle;
Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;
Mit Dank an http://www.scalabium.com/faq/dct0096.htm .
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
ShowWindow(Application.Handle, SW_SHOW);
end;
Ich habe es getestet und es funktionierte mit Delphi2006. Und Fenster-Menü und Min- / Max-Tasten sind noch sichtbar.
in Delphi XE (2010) das funktioniert perfekt: Sie shoud Hauptform bearbeiten,
program prog;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
begin
Application.Initialize;
// this value is set to "true", but you shoud set it "false"
Application.MainFormOnTaskbar := false;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
(für diese Hauptform Suche in "Modellierung Ansicht" Fenster)
danach, gehen Sie zu unit1.pas, Ihre Hauptformen Einheit und "OnShow" Ereignis von form1 tun:
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
Dies wird helfen, ich hatte das gleiche Problem, suchte ganzes Netz, aber ohne resolt
Gelöst meine Probleme in diesem Bereich von BordersStyle bsDialog / bsToolWindow (aber dann habe ich nicht brauchen die min / max ...). Aber ich frage mich, warum Sie sollten diese Attribute verbinden wollen .. Wird es nicht den ‚normalen‘ Benutzer verwirren?
Ich suche ein Stück Code, um eine Textbox in der Windows-Taskleiste zu integrieren.
Ich plane, eine Symbolleiste erstellen kann ich nicht ", um es in die Taskleiste zu integrieren.
Vielen Dank für Ihre Hilfe pj
Eine Möglichkeit, dies in C # zu tun ist:
ShowWindow(_window, SWHide);
int style = GetWindowLong(_window, GWL_EXSTYLE);
style |= WS_EX_TOOLWINDOW;
SetWindowLong(_window, GWL_EXSTYLE, style);
ShowWindow(_window, SWShow);