Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
ВнизПодскажите пожалуйста по TrayIcon Найти похожие ветки
← →
Слава_ (2004-02-13 22:34) [0]че она (иконка) после закрытия приложения продолжает весеть в трэе, а исчезает когда на нее мышь наведешь? Как это побороть, может у кого была такая проблема?
вот весь мой код
CreateTraylcon(0,"Project1");
procedure TMainForm.CreateTraylcon(n:Integer;xHint:string);
begin
with nidata do
begin
cbSize := SizeOf(TNotifyiconData) ;
Wnd := Self.Handle;
uID := n;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYTRAYNOTIFY;
hicon := Application.Icon.Handle;
szTip := "Project1";
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;
procedure TMainForm.DeleteTraylcon(n:Integer);
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle; uID := n;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
DeleteTraylcon(0);
end;
только просьба не надо предлагать ставить всякие КРУТЫЕ компоненты и тд, помогите разобраться плиз, че не хватает
← →
Defunct (2004-02-14 06:10) [1]После удаления иконки послать сообщение WM_PAINT окну трея.
можно использовать функцию:
UpdateWindow(HWND hWnd);
← →
sniknik (2004-02-14 08:16) [2]попробуй uID задавать отличное от нуля. ноль во многих случаях признак ошибки, необязательно в этом, но тем не менее создавай с с uID > 0 и удаляй с этим же.
← →
sniknik (2004-02-14 08:21) [3]кстати еще может быть "непонятка" в этом Wnd := Self.Handle; если ты CreateTraylcon вызываеш не из метода TMainForm, а уничтожение видно из него, хендлы могут быть различны. попробуй явно указать (опять в обоих вариантах) так Wnd := MainForm.Handle;
← →
Владислав (2004-02-14 10:36) [4]> Defunct (14.02.04 06:10) [1]
Приколист, однако...
> Слава_ (13.02.04 22:34)
Во первых, смотри sniknik © (14.02.04 08:21) [3].
Во вторых, убедись, что DeleteTraylcon(n:Integer) действительно выполняется, и делает то, что нужно.
Ну и еще... Попробуй DeleteTraylcon(n:Integer) вызывать не в OnDestroy, а в OnClose, например.
← →
Rouse_ (2004-02-14 10:41) [5]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi, Menus;
const
wm_IconMessage = wm_User;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
ghgf1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ghgf1Click(Sender: TObject);
private
{ Private declarations }
nid: TNotifyIconData;
public
{ Public declarations }
procedure IconTray (var Msg: TMessage);message wm_IconMessage;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
nid.cbSize := sizeof (nid);
nid.wnd := Handle;
nid.uCallBAckMessage := wm_IconMessage;
nid.hIcon := Application.Icon.Handle;
nid.szTip := "Zool";
nid.uFlags := nif_Message or nif_Icon or nif_Tip;
Shell_NotifyIcon (NIM_ADD, @nid);
end;
procedure TForm1.IconTray (var Msg: TMessage);
var
Pos: TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then
begin
GetCursorPos (Pos);
PopupMenu1.Popup (Pos.X, Pos.Y);
end;
if Msg.lParam = WM_LBUTTONDOWN then begin
ShowWindow (Handle, SW_NORMAL);
ShowWindow (Application.Handle, SW_NORMAL);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
nid.uFlags := 0;
Shell_NotifyIcon (NIM_DELETE, @nid);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;//Запрещаем закрытие
ShowWindow (Handle, sw_Hide); //Скрываем окно
ShowWindow (Application.Handle, sw_Hide); //Убираем окно с таксбара
end;
procedure TForm1.ghgf1Click(Sender: TObject);
begin
Application.Terminate;
end;
end.
Желаю успехов
← →
Владислав (2004-02-14 10:59) [6]> Слава_ (13.02.04 22:34)
Что называется, улови разницу Слава_ (13.02.04 22:34) и Rouse_ © (14.02.04 10:41) [5].
← →
Слава_ (2004-02-19 01:07) [7]спасибо большое всем!
изменил uID и все ОК !!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c