Autor Beitrag
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 21.03.05 15:53 
Hallo,

ich schreibe gerade mein erstes Non-VCL-Programm, dass für das Update meines Programmes zuständig ist und eigentlich nur ein Icon im TNA ("SysTray") benötigt. Nun habe ich einfach mal eine Konsolenanwendung erstellt und ein TNA-Icon erstellt. Doch das Icon wird nicht angezeigt, jediglich der Platz wird "reserviert". Wenn ich mit der Maus darübergehe, dann geht es auch wieder weg.
Kann es sein das ich ein Fenster (wenn auch unsichtbar) brauche um dieses erzeugen zu können? Und wenn das so ist, wie sieht der kürzeste Aufbau eines solchen aus (RegisterClassEx + CreatewindowEx?)?

Danke, Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.03.05 15:54 
Ja du benötigts ein Fenster, denn an irgfendein fenster muss das Icon seine Nachricht schicken.
wulfskin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 21.03.05 16:14 
Fehler gefunden:
ausblenden volle Höhe Delphi-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:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
program AutoUpdate;

uses
  Windows,
  Messages,
  ShellApi;

const
  ClassName = 'WndClass';
  AppName = 'Geheim';

  WM_SHELLNOTIFY = WM_USER + 1;

var
  TrayIcon: TNotifyIconData = (
    cbSize          : SizeOf(TNotifyIconData);
    uID             : 0//egal, da nur ein Icon
    uFlags          : NIF_MESSAGE + NIF_ICON + NIF_TIP;
    uCallbackMessage: WM_SHELLNOTIFY;
    hIcon           : 0//später wird es noch geladen
    szTip           : 'Updates suchen...';
  );

function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):
  lresult; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_CREATE:
      begin
        //TNA Icon erstellen
        TrayIcon.Wnd := hWnd;
        TrayIcon.hIcon := LoadImage(hInstance, MAKEINTRESOURCE(IDI_APPLICATION),
          IMAGE_ICON, 000);
        Shell_NotifyIcon(NIM_ADD, @TrayIcon);
{        if IsUpdateAvailable then begin

        end;      }

//        SendMessage(hWnd, WM_CLOSE, 0, 0);
      end;
    WM_DESTROY:
      begin
        //TNA Icon entfernen
        Shell_NotifyIcon(NIM_DELETE, @TrayIcon);
        PostQuitMessage(0);
      end;
    WM_SHELLNOTIFY:
      begin
      end;
  else
    Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  end;
end;

var
  WindowClass: TWndClassEx = (
    cbSize          : SizeOf(TWndClassEx);
    Style           : CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc     : @WndProc;
    cbClsExtra      : 0;
    cbWndExtra      : 0;
    hbrBackground   : COLOR_APPWORKSPACE;
    lpszMenuName    : nil;
    lpszClassName   : ClassName;
    hIconSm         : 0;
  );
  Msg: TMsg;

{Hauptprogramm}
begin
  WindowClass.hInstance  := hInstance;
  //Fenster registrieren
  RegisterClassEx(WindowClass);
  //Fenster anzeigen
  CreateWindowEx(0, ClassName, AppName, WS_CAPTION or WS_SYSMENU, CW_USEDEFAULT,
    CW_USEDEFAULT, 30030000, hInstance, nil);
  //Nachrichtenschleife starten
  while True do
  begin
    if not GetMessage(Msg, 000then
      Break;
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  ExitCode := Msg.wParam;
end.
Großteil aus Luckies Beispielen übernommen.

Danke, Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.