Autor Beitrag
GruppeCN
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: Fr 01.11.02 16:34 
Hallo,
ich möchte gerne, dass mein Programm beim minimieren als Icon neben der Uhr erscheint. Ich habe es bis jetzt mit dem Code Probiert, aber der funktioniert nicht.
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellApi, AppEvnts;

const
  IC_CLICK = WM_APP + 201;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Minimize(Sender: TObject);
    private
      { Private-Deklarationen }
      procedure Systray(var sMsg: TMessage); message IC_CLICK;
    public
      { Public-Deklarationen }
    end;

var
  Form1: TForm1;
  NIM : TNotifyIconData;

implementation

{$R *.DFM}

procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'Test-Programm';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

end.

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 01.11.02 16:49 
Es gibt bereits einen funktionierenden Code für dieses Problem in AUQ.de. Das weiß ich deshalb so genau, weil ich ihn gepostet habe. Für Peter2002, wenn ich mich recht erinnere.
Wenn du also die Suchfunktion ein wenig bemühst, müsstest du fündig werden und das Problem lösen können. Mit weniger Code-Zeilen überdies.

Gruß,
Mathias.

PS: Ich habe gerade festgestellt, dass die Suche ohne Umweg zum Ziel führt, wenn du als Suchbegriffe "TNA minimieren" benutzt und auch den Autor (Peter2002) angibst.
Das ist ja einfach ... :twisted:
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 01.11.02 19:07 
Unabhängig der Antwort von Mathias hab ich deinen Code geprüft und keinen Fehler entdeckt. Wenn ich das Fenster minimiere, dann erscheint ein TrayIcon neben der Uhr. Wenn ich auf das Icon klicke, dann wird das Fenster wieder hergestellt. Wo ist also das Problem?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.11.02 10:20 
Unabhängig von der Aussage Popovs (:wink:) habe ich mir den Code nur kurz angesehen und stelle die Frage: Warum dies?
ausblenden Quelltext
1:
2:
Form1.FormStyle:=fsStayOnTop; // <-- ?
Hide; // <-- ?

Erstens sollte man -laut Hilfe- zur Laufzeit nicht den Fensterstil ändern. In dem Fall verstehe ich es sowieso nicht, weil das Fenster versteckt werden soll. Warum dann also "stay on top"?
Und zweitens wird das Verstecken der Form durch Delphi bzw. das System übernommen. Und zu "Hide" fällt mir doch glatt der Peter ein:
Peter2002 hat folgendes geschrieben:
Wirklich nur ein kleiner unterschied, mit großer wirkung.
Ich habe das bisher mit Form1.hide und Form1.show gemacht.
Mit ShowWindow (...) klappts!

Meine Anweisung in besagtem Beitrag sah nämlich nur so aus:
ausblenden Quelltext
1:
2:
if(Shell_NotifyIcon(NIM_ADD,@NID)) then
  ShowWindow(Application.Handle,SW_HIDE);


Wenn ich mal raten soll, Popov: das Problem von GruppeCN wird wohl das gleiche sein, das auch Peter hatte. Das Fenster ließ sich evtl. einmal minimieren und wiederherstellen, dann aber nicht mehr.
Ich weiß nicht, ob du es mehrfach ausprobiert hast?! Eine andere Erklärung hätte ich nicht, wenn du sagst, dass die Funktion ja eigentlich klappt.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.11.02 18:34 
Ich hab mir das ganze zuerst kurz angesehen und sah zuerst keinen Fehler. Alles stand mehr oder weniger an der richtigen Stelle. Mir ist zwar das StayOnTop und Hide auch aufgefallen, aber das hab ich ignoeriert, da es keine Auswirung auf den Prozes hatte. Ich persönlich hab das noch nie so gemacht, da ich überwiegend mit D3 arbeite und es dort keine ApplicationEvents Kompo gibt. Ich hätte wahrscheinlich auch auf das minimieren des Fensters reagiert. Allerdings bleibt bei minimieren des Fensters das Fenster weiterhin in der Taskleiste. Also hab ich das mit ApplicationEvents ausprobiert und es hat funktioniert. Auch hab ich das mehrmals hintereinander minimiert.