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 ohne Taskbareintrag, nur TrayIcon? (https://www.delphipraxis.net/114212-programm-ohne-taskbareintrag-nur-trayicon.html)

divBy0 21. Mai 2008 14:14


Programm ohne Taskbareintrag, nur TrayIcon?
 
Hallo!

Das Thema wurde schon oft diskutiert habe ich gesehen, aber leider haben die Codeteile, die ich gefunden habe nicht so funktioniert, wie ich das gerne hätte.

Folgende Funktion benötige ich:

Ein Programm soll nur als TrayIcon angezeigt werden, dazu habe ich TTrayIcon benutzt. Die Programmoberfläche besteht nur aus einem Button, der immer im Vordergrund ist. Über den Button lassen sich zwei definierbare Programme umschalten.
Allerdings würde ich den Taskbareintrag gerne loswerden, da dieser nur störend für den Benutzer ist.

Das habe ich schon versucht:

Delphi-Quellcode:
  Application.ShowMainForm := False; // Mainform wird ja nicht mehr angezeigt.
Delphi-Quellcode:
procedure TMainform.FormShow(Sender: TObject);
var
  Owner: HWND;
begin
  Owner := GetWindow(Handle, GW_OWNER);
  if Owner <> 0 then
    ShowWindow(Owner, SW_HIDE);
end;
Delphi-Quellcode:
procedure TMainform.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
                GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
  ShowWindow(Application.Handle, SW_SHOW);
end;
Bin für jeden Tipp dankbar!

spaxxn 21. Mai 2008 14:24

Re: Programm ohne Taskbareintrag, nur TrayIcon?
 
Delphi-Quellcode:
procedure TfrmMain.ApplicationMinimize(Sender : TObject);
begin
  ShowWindow(Handle, SW_HIDE);
  tiMain.Show;
end;

procedure TfrmMain.FormActivate(Sender : TObject);
begin
  ApplicationMinimize(Self);
end;
tiMain ist bei mir das TrayIcon. ShowMainForm := False bleibt...

divBy0 21. Mai 2008 14:51

Re: Programm ohne Taskbareintrag, nur TrayIcon?
 
Das funktioniert leider auch nicht.

Wenn das Programm startet, muss der Button angezeigt werden. Eine Möglichkeit zum Minimieren gibt es nicht.

Wotan89 21. Mai 2008 14:53

Re: Programm ohne Taskbareintrag, nur TrayIcon?
 
Dieser Quelltext funktioniert:
Delphi-Quellcode:
  Owner := GetWindow(Handle, GW_OWNER);
  if Owner <> 0 then
    ShowWindow(Owner, SW_HIDE);
Du darfst ihn nur nicht in das TMainForm.FormShow()-Event schreiben.

EDIT: Am besten du schreibst es in das OnActivate-Ereigniss.

SirThornberry 21. Mai 2008 15:04

Re: Programm ohne Taskbareintrag, nur TrayIcon?
 
wie bereits erwähnt ist das OnShow-Event der falsche Ort. Grund:
Du sagst mit "Application.ShowMainForm := False" das dein Mainform nie angezeigt werden soll also niemals ein Show ausgeführt werden soll. Entsprechend wird auch nie das OnShow ausgeführt :mrgreen:

divBy0 21. Mai 2008 15:29

Re: Programm ohne Taskbareintrag, nur TrayIcon?
 
Danke, jetzt funktionierts.

Delphi-Quellcode:
Application.MainFormOnTaskbar := False;
Delphi-Quellcode:
procedure TMainform.FormActivate(Sender: TObject);
var
  Owner : HWND;
begin
  Owner := GetWindow(Handle, GW_OWNER);
  if Owner <> 0 then
    ShowWindow(Owner, SW_HIDE);
end;

spaxxn 22. Mai 2008 08:20

Re: Programm ohne Taskbareintrag, nur TrayIcon?
 
Hast nicht richtig gelesen, wa? :D

In meinem Beispiel stand drin, dass es das OnActivate Ereignis sein soll...


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