Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

POPUP меню в SYSTRAY   Найти похожие ветки 

 
Zergling   (2002-09-12 13:00) [0]

Подскажите plz, как в systray"е правильно обработать вызов popup меню, а то у меня после вызова меню форма становится неактивной (не могу кликать по элементам управления, например кнопкам).

вот вам код:

unit TVTrayIcon;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Menus, Controls, ShellAPI, Forms, Dialogs;

type
TTVTrayIcon = class(TComponent)
private
{ Private declarations }
FNotificationHandle: HWnd;
FTrayIcon: TIcon;
FShowHint: Boolean;
FHint: string;
FActive: Boolean;
FCurrentlyActive: Boolean;
FPopupMenu: TPopupMenu;
FOnDblClick: TNotifyEvent;
procedure NotificationWndProc(var Message : TMessage);
procedure SetShowHint(const Value: Boolean);
procedure SetHint(const Value: string);
procedure SetTrayIcon(const Value: TIcon);
procedure SetActive(const Value: Boolean);
procedure SetPopupMenu(const Value: TPopupMenu);
protected
{ Protected declarations }
procedure DoDblClick;
procedure Loaded; override;
procedure OnAppMinimize(Sender: TObject);
function SendTrayMessage(AMessage: DWORD): Boolean;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure RemoveTrayIcon;
procedure RestoreApp;
procedure ShowTrayIcon;
procedure RemoveFromTaskbar;
procedure ShowInTaskbar;
published
{ Published declarations }
property Active: Boolean read FActive write SetActive;
property Hint: string read FHint write SetHint;
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu;
property ShowHint: Boolean read FShowHint write SetShowHint;
property TrayIcon: TIcon read FTrayIcon write SetTrayIcon;
end;

procedure Register;

implementation

const
ID_TRAYICON =1;
UWM_TRAYICON = WM_USER + 1;


procedure Register;
begin
RegisterComponents("TVSystem", [TTVTrayIcon]);
end;

{ TTVTrayIcon }

constructor TTVTrayIcon.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FNotificationHandle := AllocateHwnd(NotificationWndProc);
FTrayIcon := TIcon.Create;
Application.OnMinimize := OnAppMinimize;
end;

destructor TTVTrayIcon.Destroy;
begin
if FCurrentlyActive then RemoveTrayIcon;
FTrayIcon.Free;
if FNotificationHandle <> 0 then DeallocateHWnd(FNotificationHandle);
inherited Destroy;
end;

procedure TTVTrayIcon.NotificationWndProc(var Message: TMessage);
var Pt: TPoint;
begin
if Message.Msg = UWM_TRAYICON then
begin
case Message.lParam of
WM_LBUTTONDBLCLK: DoDblClick;
WM_RBUTTONDOWN: if Assigned(FPopupMenu) then
begin
SetForegroundWindow(FNotificationHandle);
GetCursorPos(Pt);
FPopupMenu.Popup(Pt.X, Pt.Y);
end;
end;
end;
end;

procedure TTVTrayIcon.SetPopupMenu(const Value: TPopupMenu);
begin
FPopupMenu := Value;
end;


end.


 
Song ©   (2002-09-12 13:32) [1]

Вы забываете передавать WM_NULL



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
8-46003
PycUS
2002-07-01 22:11
2002.11.14
Звуки


4-46203
Дмитрий Иванов
2002-10-05 17:04
2002.11.14
Размеры окна, зная его хендл?


14-46070
Николай Быков
2002-10-24 15:35
2002.11.14
http://freeprogrammer.narod.ru


14-46068
Akella
2002-10-24 08:20
2002.11.14
delphi7


6-46017
ElectHp
2002-09-15 12:03
2002.11.14
Потоки в NMHTTP!!!