AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programm hartnäckig in Taskleiste
Thema durchsuchen
Ansicht
Themen-Optionen

Programm hartnäckig in Taskleiste

Ein Thema von tigerman33 · begonnen am 7. Apr 2006 · letzter Beitrag vom 9. Apr 2006
Antwort Antwort
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, 18: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
tigerman33

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

Re: Programm hartnäckig in Taskleiste

  Alt 9. Apr 2006, 12:18
*push*
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Programm hartnäckig in Taskleiste

  Alt 9. Apr 2006, 12:27
versuch mal ob das ganze funktioniert wenn du dein Form vom Application-Handle löst:
  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:
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
ShowWindow(Application.Handle, sw_hide); im Formshow hast.
[/Edit]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
tigerman33

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

Re: Programm hartnäckig in Taskleiste

  Alt 9. Apr 2006, 20:58
Danke,

so funktioniert es perfekt! Hätt man irgendwie auch selbst drauf kommen können, eigentlich... Was würd ich nur ohne die DP machen?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  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 06:36 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