Entwickler-Ecke

Andere .NET-Sprachen - ShowFormInTaskbar=false ... aber nicht wirklich


Christian S. - So 04.04.04 23:37
Titel: ShowFormInTaskbar=false ... aber nicht wirklich
Hallo!

Schon wieder ein WinForms-Problem. :-)

Ich habe eine Anwendung, welche nicht in der Taskbar, sondern nur in der TNA erscheinen soll. (Stichwort: "Minimize to Tray") Außerdem soll sie minimiert starten, was ja dann bedeutet, dass nur das TNA-Icon beim Start zu sehen ist.

TNA und minimiert Starten sind kein Problem. Und beim Start der Anwendung erscheint sie auch nicht in der Taskbar. Soweit alles in Ordnung.
Aber: Sobald ich die Anwendung einmal anzeigen lasse und dann wieder minimieren möchte, dann erscheint sie zwar nicht in der Taskbar, aber als "Balken" darüber. Unter "Balken" verstehe ich, dass nur noch eine extrem verkürzte Titelleiste sichtbar ist.

Wer kann mir sagen, wie ich diesen Effekt vermeiden kann?

MfG
Peter


Christian S. - Mo 05.04.04 14:56

Hallo!

Ich habe das Problem jetzt folgendermaßen gelöst:

Ich verwende folgenden Code im SizeChanged-Event der Form:

Delphi-Quelltext
1:
2:
  if self.WindowState = FormWindowState.Minimized then
    self.visible := False;


Und um die Form wiederherzustellen (das geschieht durch einen Doppelklick auf das Trayicon), verwende ich folgenden Code im OnDoubleClick-Ereignis des Trayicons:

Delphi-Quelltext
1:
2:
  self.Visible := True;
  self.WindowState :=  FormWindowState.Normal;


Sehr schön finde ich diese Lösung allerdings nicht, da beim minimieren die Form manchmal noch als "Balken" über der Taskbar aufflackert, bevor sie verschwindet.

Ich bin also immer noch an einer anderen Lösung interessiert!

MfG
Peter


Delete - Do 08.04.04 07:59

Ich hab´s mal so probiert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TWinForm.NotifyIcon1_DoubleClick(sender: System.Object;
  e: System.EventArgs);
begin
  self.Show;
  self.WindowState := FormWindowState.Normal;

  self.Activate;
end;

procedure TWinForm.TWinForm_SizeChanged(sender: System.Object;
  e: System.EventArgs);
begin
  NotifyIcon1.Visible := (self.WindowState = FormWindowState.Minimized);
  self.Visible := not(self.WindowState = FormWindowState.Minimized);
end;

Vom Flackern habe ich nichts gesehen, aber der Effekt der kurzen Titelleiste kommt IMHO durch die "ShowInTaskbar = FALSE"-Einstellung zustande. Die würde ich auf TRUE lassen. Der Button in der Taskbar verschwindet (bzw. erscheint dann wieder) durch obigen Code.


TheNeon - Do 08.04.04 13:22

hi

erm ... kA ob das mit ".NET" auch geht, aber ich hatte eben dasselbe Problem und ich habe es so gelöst, dass wenn ich das Formblatt wieder sehen will (also Klick auf TrayIcon) einfach

Delphi-Quelltext
1:
Application.Restore                    

reingeschrieben ........ und es klappt


Delete - Do 08.04.04 15:17

"Application.Restore" gibt´s nicht. (War auch mein erster Gedanke. ;)) Oder ich hab´s nicht gefunden. Aber so, wie ich das oben schrieb, funktioniert´s bei mir. Wobei das das erste Mal war, dass ich unter .NET mit einem TNA-Icon gearbeitet habe.