![]() |
Nur noch untergeordnete Forms in TaskBar anzeigen
Hallo,
Hab da mal ne Frage. Ich hab ein Programm, bei dem alle untergeordneten dynamisch erzeugten Formulare einzeln in der Taskbar angezeigt werden. Wenn man die Hauptform minimiert(wird in die systray abgelegt), bleiben die anderen Forms da. Das passt alles so. Leider bleibt aber auch ein Eintrag der Hauptform in der Taskbar stehen. Dieser sollte aber nicht da sein. Man sollte das Hauptprogramm also nur noch über die Systray öffnen können. Ich hoff, ich hab mich einigermaßen verständlich ausgedrückt. Danke im Voraus |
Re: Nur noch untergeordnete Forms in TaskBar anzeigen
versuch mal doch mal dei Fenster so aus der Taskbar zu entfernen:
Delphi-Quellcode:
SetWindowLong( Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); |
Re: Nur noch untergeordnete Forms in TaskBar anzeigen
klappt leider nicht. es verschwindet erst, wenn ich alle untergeordneten fenster schließe.
hier mal der code, mit dem ich das hauptformular in die systray minimiere:
Delphi-Quellcode:
in den untergeordneten forms, die ja erst zur laufzeit erstellt werden, steht folgendes, damit sie einzeln in der taskbar erscheint:
IconData.cbSize := SizeOf(IconData);
IconData.Wnd := AllocateHWnd(SysTrayIconMsgHandler); IconData.uID := 0; IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; IconData.uCallbackMessage := TRAY_CALLBACK; IconData.hIcon := form1.image1.picture.Icon.Handle IconData.szTip := 'blabla'; if not Shell_NotifyIcon(NIM_ADD, @IconData) then ShowMessage('add fail');
Delphi-Quellcode:
wenn ein fenster geöffnet ist, dann verschwindet zwar die hauptform und wird auch in der systray angezeigt, aber es bleibt auch in der taskbar.
procedure TForm4.CreateParams(var Params : TCreateParams);
begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; params.WndParent := GetDesktopwindow; end; wnen kein anderes fenster offen ist, klappts. Danke. |
Re: Nur noch untergeordnete Forms in TaskBar anzeigen
Und wenn du das, was ich oben geschrieben habe, einfach ins Onshow-Event des Main-Forms packst?
Und dann kannst du ja mal diesen Code von dir auskomentieren und testen:
Delphi-Quellcode:
Und vielleicht durch diesen ersetzen:
procedure TForm4.CreateParams(var Params : TCreateParams);
begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; params.WndParent := GetDesktopwindow; end;
Delphi-Quellcode:
So habe ich das in meinem Projekt gelöst...
SetWindowLong(Handle, GWL_ExStyle, WS_Ex_AppWindow);
Am besten kommt das auch ins OnShow-Event.. |
Re: Nur noch untergeordnete Forms in TaskBar anzeigen
Klappt irgendwie alles nicht :(
ich hab jetzt im OnShow der mainform das drin:
Delphi-Quellcode:
im OnShow der anderen form hab ich das drin:
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
Delphi-Quellcode:
wenn ich jetzt die hauptform minimier(wenn keine anderen forms offen sind), dann verschwindet die in die systray, aber es bleibt immer noch der eintrag in der taskbar!
SetWindowLong(Handle, GWL_ExStyle, WS_Ex_AppWindow);
wenn andere forms geöffnet sind und ich minimier dann die hauptform bleibt unten links so ein kleiner balken über dem startbutton und ein eintrag der hauptform bleibt ebenfalls in der taskbar. was ich will ist aber, dass die anderen fenster quasi unabhängig von der eigentlichen hauptform sind, d.h. nen eigenen taskbar eintrag haben, nicht mit-minimiert werden, wenn die hauptform miminiert wird und die hauptform minimiert(in die systray, also ohne taskbar eintrag) wird, die andern forms aber nicht. Vielleicht bin ich auch einfach zu blöd dafür :D Trotzdem Danke! |
Re: Nur noch untergeordnete Forms in TaskBar anzeigen
Probiers mal so:
erstell dir ne function die überprüft, ob auf den Minimieren-Button geklickt wurde, da baust du dann folgendes ein: zuerst versteckst du das Fenster mit
Delphi-Quellcode:
dann rufst du den Befehl
form1.visible:=false;
Delphi-Quellcode:
auf.
SetWindowLong( Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW ); den befehl application.minimize musst/darfst du dann nicht mehr ausführen. der Unterschied zu den anderen Antworten liegt darin, das fenster nicht wirklich zu minimieren, sondern es bloß unsichtbar zu machen. dadurch entsteht nicht dieser unerwünschte kleine Balken über dem Startbutton. so läufts jedenfalls bei mir..... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz