Einzelnen Beitrag anzeigen

tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#1

Programm hartnäckig in Taskleiste

  Alt 7. Apr 2006, 17:36
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.

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.

Jemand ne Idee?
Gruß
Christian
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat