Entwickler-Ecke

Windows API - NonVCL, Nachrichtenschleife und TNA


O'rallY - So 15.06.03 12:23
Titel: NonVCL, Nachrichtenschleife und TNA
Ich habe mich jetzt mal endlich drangesetzt, um mir mal ein bisschen die NonVCL-Programmierung einzutrichtern. Dazu wollte ich ein kleines Programm schreiben, dass sich nur im TNA befindet. Schwierigkeiten macht mir aber bissher noch die Nachrichtenauswertung und noch ein Problem: Wenn ich das Programm starte, erscheinz zwar das TrayIcon, jedoch verschwindet es wieder, sobald man mit der Maus darüber fährt. Das Programm läuft allerdings noch weiter. Hier der Code:

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:
program FirstStep;
uses
  Windows,Messages,ShellAPI;

var
  msg: TMsg;

function AddTrayIcon: boolean;
var
  IconData: TNOTIFYICONDATA;
begin
  with IconData do
    begin
      cbSize := SizeOf(TNOTIFYICONDATA);
      Wnd := hInstance;
      uID := 1
      uFlags := NIF_ICON + NIF_TIP;
      hIcon := LoadIcon (0, IDI_APPLICATION);
      szTip := 'Tooltip';
    end;

  Result := Shell_NotifyIcon (NIM_ADD, @IconData);
end;

begin
  if not AddTrayIcon then
    exit;
  while true do
  begin
    if not GetMessage(msg, 000then
      break;
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
  ExitCode := msg.wParam;
end.


Und wie schon gefragt: Wie kann ich jetzt eigentlich die Nachrichten, die mir die Nachrichtenschleife so fleißig abfängt auswerten bzw. darauf reagieren? Beim den Tuts, in denen ein Fenster erzeugt wurde, gab es eine Prozedur (oftmals names WndProc) deren Addresse beim Erzeugen der Form übegeben wurde.
Kurzum: Ich weiß nicht wie es geht und bitte um Hilfe.


Delete - So 15.06.03 13:06

Antwort siehe hier: http://www.delphipraxis.net/viewtopic.php?t=6305


Anonymous - Mo 23.06.03 23:40

Es ist übrigens nicht korrekt, daß Windows Nachrichten nur an Fenster schickt (eine solche Nachrichtenschleife würde funktionieren!), es stimmt aber, daß in diesem Fall nur ein Fenster als Nachrichten-Dispatcher registriert werden kann. Deshalb brauchst du eines.