Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programm hartnäckig in Taskleiste (https://www.delphipraxis.net/67002-programm-hartnaeckig-taskleiste.html)

tigerman33 7. Apr 2006 17:36


Programm hartnäckig in Taskleiste
 
Hallo,

ich habe ein Programm, das sich beim Minimieren in den Tray legt und dabei natürlich vollkommen korrekt seinen Taskleisten-Button verliert. Nun habe ich für dieses Programm ein zusätzliches Formular erstellt, eine Art Info-Fenster das über der Taskleiste hochgefahren kommt. Mit diesem hat mein Programm nun auf einmal auch wenn es in der TNA liegt einen Taskleisten-Button. Das möchte ich nicht!

Bevor mir jetzt jemand sagt "benutz die Suche": Hab ich, danke. Ich hab es immerhin soweit hinbekommen jetzt, dass er mir den dämlichen Button nicht mehr ständig vorhält, sondern nur wenn das Infofenster tatsächlich gerade angezeigt wird. Hier einige relevante Codeauszüge:

Im Hauptprogamm:
Delphi-Quellcode:
Application.CreateForm(TfrmInfo, frmInfo);
frmInfo.Hide; // <-- Damit wird der Button zumindest am Anfang mal nicht dargestellt (außer das Hauptfenster ist aktiv).
Für das Hauptfenster, um den Button wieder in die Taskbar einzutragen:
Delphi-Quellcode:
procedure TfrmMain.FormShow(Sender: TObject);
begin
  // frmInfo may have hidden the taskbar button while the form was minimized. Re-enter:
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW and not WS_EX_TOOLWINDOW);
  ShowWindow(Application.Handle, SW_SHOW);
end;
Und zuguterletzt:
Delphi-Quellcode:
procedure TfrmInfo.FormShow(Sender: TObject);
begin
  if not Application.MainForm.Visible then begin
    ShowWindow(Application.Handle, SW_HIDE);
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
    ShowWindow(Application.Handle, SW_SHOW);
    ShowWindow(Handle, SW_HIDE);
    SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
    ShowWindow(Handle, SW_SHOW);
  end;
end;
Und das interessiert ihn jetzt überhaupt nicht--sobald das Infofenster hochgefahren kommt, legt er mir den Taskbarbutton an. :wall:

Am liebsten wäre es mir ja, ich müsste diese ganzen Verrenkungen überhaupt nicht anstellen, und das Infofenster wird--zumindest was das Verhalten der Taskbar angeht--einfach ignoriert. Aber alle Versuche die ich bis jetzt dahingehend unternommen habe (insbesondere Style auf WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW) sind leider ins Leere gelaufen. :cry:

Jemand ne Idee?
Gruß
Christian

tigerman33 9. Apr 2006 11:18

Re: Programm hartnäckig in Taskleiste
 
*push*

SirThornberry 9. Apr 2006 11:27

Re: Programm hartnäckig in Taskleiste
 
versuch mal ob das ganze funktioniert wenn du dein Form vom Application-Handle löst:
Delphi-Quellcode:
  SetWindowLong(Handle, GWL_HWNDPARENT, 0);
[Edit]
Wenn ich folgendes in ein Buttonclick packe verschwindet das Form auch aus der Taskleiste:
Delphi-Quellcode:
  ShowWindow(Application.Handle, sw_hide);
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
Dein Problem ist also das du nach eben diesen Anweisungen wieder:
Delphi-Quellcode:
ShowWindow(Application.Handle, SW_SHOW);
Und da ist es logich das die Anwendung wieder in der Taskleiste angezeigt wird, schließlich blendest du ja damit das Applicaiton wieder ein.

Im Normalfall reicht es eigentlich schon wenn du nur
Delphi-Quellcode:
ShowWindow(Application.Handle, sw_hide);
im Formshow hast.
[/Edit]

tigerman33 9. Apr 2006 19:58

Re: Programm hartnäckig in Taskleiste
 
Danke,

so funktioniert es perfekt! :thumb: Hätt man irgendwie auch selbst drauf kommen können, eigentlich... :oops: Was würd ich nur ohne die DP machen? :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 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