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.

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top