Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Systray Komponente - 8 Fehler (https://www.delphipraxis.net/35505-systray-komponente-8-fehler.html)

MisterNiceGuy 8. Dez 2004 10:03


Systray Komponente - 8 Fehler
 
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!! :cry:

Alex_ITA01 8. Dez 2004 11:02

Re: Systray Komponente - 8 Fehler
 
Hi,

1) Nimm das override hinter der WndProc weg, das dürfte helfen
2) Versuche Self.Handle (deine Komponente muss ja irgendwo ein Handle haben)
3) Für 'Shell_NotifyIcon' und 'NIM_DELETE' musst du glaube ich ShlObj in die Uses einfügen (ich glaube die heißt so)


Ich hoffe das hilft erstmal,
MFg Alex

Alex_ITA01 8. Dez 2004 11:03

Re: Systray Komponente - 8 Fehler
 
achso:

deine property müssen so heißen:

Delphi-Quellcode:
property Tray_on_minimize: boolean read FTray_on_minimize write SET_Tray_on_minimize;
property Tray_on_close: boolean read FTray_on_close write SET_Tray_on_close;
MFG Alex

Alex_ITA01 8. Dez 2004 11:04

Re: Systray Komponente - 8 Fehler
 
und die procedure musst du auch noch Implementieren:

procedure TSystray.WMSysCommand(var Message: TWMSysCommand);
begin
//MACH IRGENDWAS
end;

MisterNiceGuy 8. Dez 2004 11:08

Re: Systray Komponente - 8 Fehler
 
Danke, das mit dem override funktioniert schonmal!

Und danke für's Fehlersuchen ;)

Das mit dem Handle funzt leider noch nicht, ich gebe self an und er schlägt mir ne Menge vor, aber kein Handle oder keine Form
:/ (Die muss da ja nach vorne gebracht werden)

Alex_ITA01 8. Dez 2004 11:10

Re: Systray Komponente - 8 Fehler
 
ja das mit dem Handle war ein schuss in den Ofen :-)
habe leider keine Zeit das herauszufinden aber auf alle Fälle ist es jetzt nur noch 1 Fehler , ach ne, 2 (Handle und Form)

MFG

MisterNiceGuy 8. Dez 2004 11:20

Re: Systray Komponente - 8 Fehler
 
Jetzt bekomm ich keine Fehlermeldungen mehr, danke!! :mrgreen:

Jetzt muss das Teil nur noch funktionieren... *g*


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