Текущий архив: 2002.12.09;
Скачать: CL | DM;
Внизкак сделать програму невидемой Найти похожие ветки
← →
drou (2002-10-06 00:49) [0]Проблема такая я хочу чтобы порограма не показывалась в свернутом виде (незнаю как это назвать) справа от пуска (ну там где все запущенные програмы отображаются). а была слева от часов (там где языки и регулятор громкости и т.д.) Буду вам очень благодарен за обяснения или примеры.
← →
Suntechnic (2002-10-06 09:05) [1]Там где "справа от пуска" taskbar называется, а "слева от часов" system tray или taskbar status area. Убрать окно из taskbar-а можно с помощью
Application.ShowMainForm := false;
Ну а как иконки в системный лоток пихать это уже хит сезона, причём не первого :) Ищи инфу по ф-цииShell_NotifyIcon
или готовые компоненты, коих навалом.
← →
Drin (2002-10-06 10:27) [2]Для работы с SystemTray существует всего одна функция. Вот ее
Си-прототип:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // message identifier
PNOTIFYICONDATA pnid // pointer to structure
);
Эта функция описана в заголовочном файле Win32-SDK "shellapi.h",
включаемом в программу при включении "windows.h". Параметр
dwMessage может принимать одно из трех значений: NIM_ADD,
NIM_DELETE, NIM_MODIFY. Для добавления иконки он должен быть
установлен в NIM_ADD.
Параметр pnid имеет тип PNOTIFYDATA, который описан как:
typedef struct _NOTIFYICONDATA { // nid
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
Поля структуры NOTIFYICONDATA имеют следующий смысл:
cbSize - размер структуры, должен быть
sizeof(NOTIFYICONDATA).
hWnd - дескриптор окна, которое будет получать события
мыши над иконкой.
uID - уникальный идентификатор иконки. Идентификатор
должен быть уникален в пределах окна - обрабо-
тчика, передаваемого в hWnd.
uFlags - битовое поле, определяющее какое из следующих
полей несет действительную информацию.
Может быть одним из следующих значений: NIF_ICON,
NIF_MESSAGE, NIF_TIP или их OR-комбинацией.
uCallbackMessage - сообщение, передаваемое окну - обработчику при
событиях мыши. Желательно получать номер
сообщения вызовом RegisterWindowMessage(),
но допускаются и значения WM_USER+N, где N > 0.
hIcon - дескриптор иконки, помещаемой на Tray.
szTip - текст для ToolTip"а, если szTip[0] = 0x00, то
ToolTip"а не будет.
Таким образом, для добавления иконки на Tray необходимо
заполнить экземпляр структуры NOTIFYICONDATA и вызвать функцию
Shell_NotifyIcon() с параметром NIM_ADD и указателем на
заполненный экземпляр структуры.
При добавлении иконки необходимо заполнить поля cbSize, hWnd,
uID, uFlags, uCallbackMessage, hIcon. Поле szTip можно оставить
пустым, если вам не нужен ToolTip. Поле uFlags должно содержать
как минимум NIF_MESSAGE | NIF_ICON.
← →
@lexey (2002-10-06 23:11) [3]Вот тебе целая демонстрационная программа, именно то, что тебе надо.
ShellAPI, ExtCtrls;
type
TFrm = class(TForm)
...
public
//Пользовательское сообщение которое будет посылаться
//нашему окну, которое мы и отлавливаем
procedure IconMessages(var msg: TMessage); message WM_USER + 123;
procedure AddIconOnTaskBar;
end;
const WM_MYMSG = WM_USER + 123;//Задаем свое собственное сообщение
var
Frm: TFrm;
IconStruct: TNotifyIconData; //Структура данных иконки из модуля ShellAPI
icons: HICON;//Для загрузки иконки в системный трей
implementation
{$R *.DFM}
//Процедура обрабатывающая отловленное сообщение после клика на иконке в системном трее
procedure TFrm.IconMessages(var msg: TMessage);
begin
if msg.LParam = WM_LBUTTONUP then
begin
//=========== Показываем форму в TaskBar (Only API) ===============
SetWindowLong(Application.Handle, GWL_EXSTYLE,WS_EX_APPWINDOW);
ShowWindow(Application.Handle,SW_SHOW);
//=========== Показываем форму на DeskTop (Only API) ==============
ShowWindow(Application.Handle,SW_NORMAL);
//============ Удаляем иконку из SysTray ==========================
Shell_NotifyIcon(NIM_DELETE, @IconStruct);
end;
if msg.LParam = WM_RBUTTONUP then
begin
//Показываем подменю при клике правой кнопкой, например
end;
end;
procedure TFrm.AddIconOnTaskBar;
begin
//=========== Скрываем форму из TaskBar (Only API) ===============
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong (Application.Handle, GWL_EXSTYLE, not WS_EX_APPWINDOW);
//================================================================
IconStruct.cbSize := SizeOf(TNOTIFYICONDATA);
IconStruct.Wnd := Frm.Handle;// Окно которое получает уведомление о том,
// что иконка добавлена в System Tray
IconStruct.uID :=1;
IconStruct.uFlags := NIF_MESSAGE or NIF_TIP or NIF_ICON;
IconStruct.uCallbackMessage :=WM_MYMSG;//сообщение которое будет посылать "иконка" в системном трее
IconStruct.szTip := "Программа в фоновом режиме."#13#10"Hello all";
IconStruct.hIcon := Icons;//Для иконки самой программы
Shell_NotifyIcon(NIM_ADD, @IconStruct); //Добавить иконку в SysTray
end;
procedure TFrm.FormCreate(Sender: TObject);
var IconID: word;
begin
//"Воруем" иконку у приложения
Icons:=ExtractAssociatedIcon(HInstance, PChar(Application.ExeName), IconID);
end;
procedure TFrm.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconStruct); //Удалить иконку из SysTray
end;
...
end.
P.S. Незабудь поблагодарить: http://www.kc.ru/~dubok/
← →
Opuhshii (2002-10-07 11:35) [4]:) мог в Чате у ИИ спросить,.. 1 из 3-х вариантов ответов - исчерпывающий,.. ;)
← →
vidiv (2002-10-09 08:18) [5]А что TRXTrayIcon - не подойдет для systray. А скрыть из taskbara можно одной строчкой
showwindow(application.handle,sw_hide);
это надо делать при сворачивании и разворачиваниии.
Страницы: 1 вся ветка
Текущий архив: 2002.12.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c