Form nicht in Taskabar anzeigen

Für Fragen von Einsteigern und Programmieranfängern...
Pascal95

Form nicht in Taskabar anzeigen

Beitrag von Pascal95 »

Hallo,

wie ist es möglich den Taskbar-Eintrag des Fensters nicht anzeigen zu lassen?

Pascal

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form nicht in Taskabar anzeigen

Beitrag von Socke »

Frag mal bitte Google oder die Forensuche oder was weiß ich wen (z.b. die Bibliothekssuche auf der Portal-Seite), aber das Thema hatten wir hier erst vor kurzem.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Form nicht in Taskabar anzeigen

Beitrag von felix96 »

Gibts nicht so was wie ShowInTaskbar als Property von TForm?
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Form nicht in Taskabar anzeigen

Beitrag von u-boot »

-.-
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Pascal95

Re: Form nicht in Taskabar anzeigen

Beitrag von Pascal95 »

Hallo!
Socke hat geschrieben:Frag mal bitte Google oder die Forensuche oder was weiß ich wen (z.b. die Bibliothekssuche auf der Portal-Seite), aber das Thema hatten wir hier erst vor kurzem.
Ja, ich habe schon gesucht, aber nur Möglichkeiten für Delphi, das so dann nicht mit Lazarus ging.
felix96 hat geschrieben:Gibts nicht so was wie ShowInTaskbar als Property von TForm?
Ja, soetwas gibt es. Nur leider funktioniert es nicht, wenn ich stNever wähle.


Für die, die es interresiert:
Ich habe es nun aber folgendermaßen hingekriegt:

Code: Alles auswählen

procedure HideTaskBarEntry(AHandle:THandle);
var
   Owner1 : HWnd;
begin
   Owner1:=GetWindow(AHandle,GW_OWNER);
   ShowWindow(Owner1,SW_HIDE);
end;
Das darf weder ins OnCreate, noch ins OnShow, weil die Form danach erst auf dem Bildschirm erstellt (gezeichnet) wird (bzw. beim OnShow).

So wollte ich eine kleine Verzögerung von ein paar Millisekunden einbauen, was nicht ganz so ordentlich wäre.

Also hab ichs dann so hingekriegt (wohl der sauberste Weg):

Code: Alles auswählen

procedure TForm1.FormActivate(Sender: TObject);
begin
  HideTaskBarEntry(Form1);
end;
Edit:
Aha, den Thread habe ich nun gefunden, den "Socke" wohl meinte: http://www.lazarusforum.de/viewtopic.php?p=40108#p40108
Der Property ShowInTaskBar sei nicht für das Hauptformular.
So ist es eher das Gegenteil, nach dem ich suchte, weil man damit vermutlich andere Forms zusätzlich in der Taskleiste anzeigen kann.
Naja, so habe ich wenigstens eine vernünftige Lösung.
//Edit Ende

Pascal

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form nicht in Taskabar anzeigen

Beitrag von Socke »

Genau den Thread meinte ich.

Wenn du dein Programm plattformunabhängig machen willst (also auch für Linux/Mac/etc.), solltest du ein paar {$IFDEF windows}{$ENDIF} Compilerschalter einbauen. Die Funktionen, die du nutzt, sind nämlich nur unter Windows vorhanden (bzw. gehören zu Windows selbst) und gibt es somit woanders nicht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Pascal95

Re: Form nicht in Taskabar anzeigen

Beitrag von Pascal95 »

Hallo,

Mit solchen "Compilerschalter" bzw. Compileranweisungen im Quellcode habe ich mich noch nicht allzu sehr beschäftigt.

Code: Alles auswählen

{$IFDEF windows}
...
{$ENDIF}
Kennt jemand vielleicht auch eine andere (bessere) Möglichkeit, auch wenn es so funktioniert. In dem anderen Thread wurde ja keine Lösung gefunden.

Pascal

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Form nicht in Taskabar anzeigen

Beitrag von carli »

Die eingebaute Lazarzs-Property der MainForm benutzen und in den Bugtracker schreiben, dass das Feature noch nicht implementiert ist.

Pascal95

Re: Form nicht in Taskabar anzeigen

Beitrag von Pascal95 »

Hallo.
carli hat geschrieben:[...] In den Bugtracker schreiben, dass das Feature noch nicht implementiert ist.
Der "Bug" wurde bereits gemeldet: http://bugs.freepascal.org/view.php?id=9684

Ob es sich dabei um einen Bug handelt oder nicht weiß ich nicht.
Es kann sein, dass diese Eigenschaft (ShowInTaskBar) nur für die Nebenformulare (nicht das Hauptformular) geeignet ist

Pascal

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Form nicht in Taskabar anzeigen

Beitrag von MitjaStachowiak »

Ja, ich habe schon gesucht, aber nur Möglichkeiten für Delphi, das so dann nicht mit Lazarus ging.
Auch wenn dieses Thema jetzt schon fast ein Jahr alt ist - ich hatte das gleiche Problem und bin deswegen fast verrückt geworden :mrgreen:
Wer danach sucht, findet sicher folgende Zeilen, die aber nur in Delphi (und auf Windows) funktionieren:

Code: Alles auswählen

ShowWindow(Application.Handle, SW_HIDE);
 SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
 ShowWindow(Application.Handle, SW_SHOW);
Ich habe schließlich diesen Beitrag hier gelesen (http://www.lazarus.freepascal.org/index ... 870.0;wap2" onclick="window.open(this.href);return false;) und beides kombiniert:

Code: Alles auswählen

ShowWindow(GetParent(Handle), SW_HIDE);
 SetWindowLong(GetParent(Handle), GWL_EXSTYLE, getWindowLong(GetParent(Handle), GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
 ShowWindow(GetParent(Handle), SW_SHOW);
Diese Zeilen muss man im onCreate der MainForm einbauen, dann ist das TaskBar-Icon weg. Dieser Trick ist sehr ähnlich, zu der hier diskutierten Lösung mit HideTaskBarEntry, welche für mich aber nicht in Frage kam (Wegen onCreate). Funktioniert die Lazarus-Methode showInTaskBar auf Linux denn inzwischen einwandfrei (Also auch mit der MainForm)? Wenn ja, könnte man das ja jetzt für Windows mal so implementieren...

Ich hoffe, das wird allen, die in Zukunft dieses Problem haben, helfen.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Form nicht in Taskabar anzeigen

Beitrag von Bora4d »

Damit klapt's auch:

Code: Alles auswählen

uses Windows;
.
.
.
procedure TForm2.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);  
end;
2.te Formular hat automatisch Visible:=false; Entweder oben oder bei ObjektInspektor Visible:=true setzen nicht vergessen.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Form nicht in Taskabar anzeigen

Beitrag von Maik81ftl »

Bora4d hat geschrieben:Damit klapt's auch:

Code: Alles auswählen

uses Windows;
.
.
.
procedure TForm2.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);  
end;
2.te Formular hat automatisch Visible:=false; Entweder oben oder bei ObjektInspektor Visible:=true setzen nicht vergessen.
??? aba net unter Ubuntu 10.04 zumindes net bei mir...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Form nicht in Taskabar anzeigen

Beitrag von MitjaStachowiak »

Also GetParent braucht man schon, sonst ist mindestens ein Icon in der Taskleiste zu sehen, aber die beiden ShowWindow kann man weglassen. Keine Ahnung, warum überall steht, dass man die braucht...

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Form nicht in Taskabar anzeigen

Beitrag von Bora4d »

Ohh Entschuldigung, meinte er für Linux? Dann muß man vielleicht in X-Window-Api o.ä. nachschauen.
Hier ist link zu X-Api mehr kann ich da leider nicht helfen:
http://tronche.com/gui/x/xlib/

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Form nicht in Taskabar anzeigen

Beitrag von Bora4d »

MitjaStachowiak hat geschrieben:Also GetParent braucht man schon, sonst ist mindestens ein Icon in der Taskleiste zu sehen, aber die beiden ShowWindow kann man weglassen. Keine Ahnung, warum überall steht, dass man die braucht...
Also bei mir klapt mein Code so wie ich es angegeben habe unter XP. Also beide Icons sichtbar.

Was ich auch jetzt entdeckte ist dass es für Formulare eine ShowInTaskBar-Eigenschaft gibt. Damit klappts auch, also das alles oben umsonst gemacht. :P

Antworten