AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Nur noch untergeordnete Forms in TaskBar anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Nur noch untergeordnete Forms in TaskBar anzeigen

Ein Thema von sabelrider · begonnen am 30. Jul 2003 · letzter Beitrag vom 14. Sep 2003
Antwort Antwort
sabelrider

Registriert seit: 30. Jul 2003
6 Beiträge
 
#1

Nur noch untergeordnete Forms in TaskBar anzeigen

  Alt 30. Jul 2003, 22:16
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
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#2

Re: Nur noch untergeordnete Forms in TaskBar anzeigen

  Alt 31. Jul 2003, 07:43
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);
Alexander
  Mit Zitat antworten Zitat
sabelrider

Registriert seit: 30. Jul 2003
6 Beiträge
 
#3

Re: Nur noch untergeordnete Forms in TaskBar anzeigen

  Alt 31. Jul 2003, 09:23
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:
  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');
in den untergeordneten forms, die ja erst zur laufzeit erstellt werden, steht folgendes, damit sie einzeln in der taskbar erscheint:

Delphi-Quellcode:
procedure TForm4.CreateParams(var Params : TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  params.WndParent := GetDesktopwindow;
end;
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.
wnen kein anderes fenster offen ist, klappts.

Danke.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#4

Re: Nur noch untergeordnete Forms in TaskBar anzeigen

  Alt 31. Jul 2003, 09:28
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:
procedure TForm4.CreateParams(var Params : TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  params.WndParent := GetDesktopwindow;
end;
Und vielleicht durch diesen ersetzen:
SetWindowLong(Handle, GWL_ExStyle, WS_Ex_AppWindow); So habe ich das in meinem Projekt gelöst...
Am besten kommt das auch ins OnShow-Event..
Alexander
  Mit Zitat antworten Zitat
sabelrider

Registriert seit: 30. Jul 2003
6 Beiträge
 
#5

Re: Nur noch untergeordnete Forms in TaskBar anzeigen

  Alt 31. Jul 2003, 13:52
Klappt irgendwie alles nicht
ich hab jetzt im OnShow der mainform das drin:

Delphi-Quellcode:
SetWindowLong(Application.Handle, GWL_EXSTYLE,
                 GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                 WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
im OnShow der anderen form hab ich das drin:

SetWindowLong(Handle, GWL_ExStyle, WS_Ex_AppWindow); 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!

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

Trotzdem Danke!
  Mit Zitat antworten Zitat
progger

Registriert seit: 14. Sep 2003
1 Beiträge
 
#6

Re: Nur noch untergeordnete Forms in TaskBar anzeigen

  Alt 14. Sep 2003, 12:47
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

form1.visible:=false; dann rufst du den Befehl

Delphi-Quellcode:
SetWindowLong( Application.Handle, GWL_EXSTYLE,
                 GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                 WS_EX_TOOLWINDOW );
auf.

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.....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz