Hi, ich versuche grade Luckie's
TNA Code in eine Komponente zu packen, leider treten da eine
Menge Fehler auf die ich partout nicht wegbekomme :/
Hier mal der QT:
Delphi-Quellcode:
[...]
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, menus, ShellAPI;
type
TSystray =
class(TComponent)
private
{ Private-Deklarationen }
IconData: TNotifyIconData;
FTray_on_minimize: boolean;
FTray_on_close: boolean;
FPopupmenu: TPopupmenu;
procedure WndProc(
var Msg: TMessage);
override;
procedure WMSysCommand(
var Message: TWMSysCommand);
message WM_SYSCOMMAND;
procedure Set_Tray_on_minimize(Value: boolean);
procedure Set_Tray_on_close(Value: boolean);
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
published
{ Published-Deklarationen }
property Tray_on_minimize: boolean
read FTray_on_minimize
write FTray_on_minimize;
property Tray_on_close: boolean
read FTray_on_close
write FTray_on_close;
property Popupmenu: TPopupmenu
read FPopupmenu
write FPopupmenu;
end;
procedure Register;
implementation
[...]
procedure TSystray.WndProc(
var Msg: TMessage);
var
Point: TPoint;
begin
if Msg.Msg = WM_USER + 20
then
begin
case Msg.lParam
of
WM_RBUTTONDOWN:
begin
SetForegroundWindow(
Handle);
GetCursorPos(Point);
FPopUpMenu.PopUp(Point.X, Point.Y);
end;
WM_LBUTTONDOWN:
begin
//ShowMessage('links runter');
end;
WM_LBUTTONDBLCLK:
begin
Form1.Show;
// Icon nur anzeigen wenn Fenster minimiert
Shell_NotifyIcon(NIM_DELETE, @IconData);
end;
end;
end;
inherited;
end;
procedure TSystray.Set_Tray_on_minimize(Value: boolean);
begin
if Value <> FTray_on_minimize
then
FTray_on_minimize := Value;
end;
procedure TSystray.Set_Tray_on_close(Value: boolean);
begin
if Value <> FTray_on_close
then
FTray_on_close := Value;
end;
Jetzt werden vom Compiler folgende Meldungen angezeigt:
Code:
[Fehler] Systray.pas(39): Methode 'WndProc' nicht in Basisklasse gefunden
[Fehler] Systray.pas(67): Undefinierter Bezeichner: '
Handle'
[Fehler] Systray.pas(77): Undefinierter Bezeichner: 'Form1'
[Fehler] Systray.pas(79): Undefinierter Bezeichner: 'Shell_NotifyIcon'
[Fehler] Systray.pas(79): Undefinierter Bezeichner: 'NIM_DELETE'
[Hinweis] Systray.pas(31): Das private Symbol 'Set_Tray_on_minimize' wurde deklariert, aber nie verwendet
[Hinweis] Systray.pas(32): Das private Symbol 'Set_Tray_on_close' wurde deklariert, aber nie verwendet
[Fehler] Systray.pas(40): Ungenügende Forward- oder External-Deklaration: 'TSystray.WMSysCommand'
[Fataler Fehler] dclusr50.dpk(33): Verwendete
Unit '\\S-INF-01\VOL4\SCHUELER\JFREIKNE\Systray Komponente\Systray.pas' kann nicht compiliert werden
Dass er Form1 nicht kennt, kapier ich, aber wie ich das mit dem WNDPROC hinbekomme weiß ich nicht!
Hat eine Komponente immer einen Besitzer, dem ich dann die neue WndProc zuweisen kann?
Hoffe ihr könnt mir helfen!!