Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
ВнизТрей Найти похожие ветки
← →
adalx (2006-05-31 15:31) [0]Как спрятать прогу в трей. Спасибо.
← →
Kolan © (2006-05-31 15:40) [1]Сейчас начнётся...
← →
adalx (2006-05-31 15:43) [2]Не понял, что начнётся?
← →
Джо © (2006-05-31 15:43) [3]Уже началось.
← →
McSimm © (2006-05-31 15:44) [4]
> Как спрятать прогу в трей. Спасибо.
Это вам спасибо !
:)
← →
Fay © (2006-05-31 15:45) [5]http://www.yandex.ru/yandsearch?rpt=rad&text=%E7%E0%EF%F3%E7%E4%FB%F0%E8%F2%FC+%E3%E4%E5+%F7%E0%F1%E8%EA%E8
← →
Petr V. Abramov © (2006-05-31 15:45) [6]а как ее там найти?
← →
Kolan © (2006-05-31 15:46) [7]Вот тут:
http://www.delphimaster.ru/cgi-bin/nuts.pl?&showpage=9
есть сть пост(так сказать) под названием Трейбар...
← →
имя (2006-05-31 15:46) [8]Удалено модератором
← →
Внук © (2006-05-31 15:48) [9]Автору - пожизненный эцих с гвоздями за глумление с особым цинизмом :)
← →
antonn © (2006-05-31 15:49) [10]Удалено модератором
← →
adalx (2006-05-31 15:54) [11]Внуку:
Это мне чтоли?
← →
McSimm © (2006-05-31 15:54) [12]
> Как спрятать прогу в трей.
В общем вам надо немножко подправить терминологию, тогда поиск ответов и решение задачи станут намного легче.
1. Спрятать "прогу" нельзя. (Во всяком случае не в том смысле, в котором это надо вам.) Можно скрыть окно программы и это никакого отношения к "трею" не имеет.
2. В трей нельзя спрятать или поместить программу. В нем можно зарегистрировать "иконку", события от которой сможет обрабатывать ваша программа.
Таким образом вы можете выделить несколько подзадач. Научится скрывать / показывать окно программы, управлять отображением кнопки окна в панели задач, регистрировать иконку в системном "трее", обрабатывать его сообщения.
Вот, вроде такое направление дальнейших исследований.
Ну или в FAQ/поиск, там сразу код или компоненту дать могут.
← →
tsa (2006-05-31 15:55) [13]Лоток там, не трей.
← →
syte_ser78 © (2006-05-31 15:55) [14]adalx (31.05.06 15:54) [11]
Тебе. Спрашивать надо либо
"как запуздырить иконку в трею" или
"как свернуть программу туда где часики"
← →
adalx (2006-05-31 15:58) [15]Спасибо McSimm за нормальный ответ. Я не знал, что иконки в трее не связаны с окном формы. Теперь всё ясно.
← →
McSimm © (2006-05-31 15:58) [16]
> Это мне чтоли?
Поймите правильно. Дело в том, что заданный вами вопрос давно перестал быть вопросом. Это вопрос-легенда, это фолькльор ( не хватает только уточнения - "туда, где часики" )
Откровенно говоря, я, например, не совсем уверен, что вы задали его серьезно, а не захотели подшутить :)
← →
Vovchik_A © (2006-05-31 16:04) [17]2McSimm © (31.05.06 15:58) [16]
А это, что туда, где часики ? :)
← →
Palladin © (2006-05-31 16:04) [18]а самое интересное что если поискать в гугле по словам "трей delphi" давно уже можно было бы найти ответ...
← →
McSimm © (2006-05-31 16:05) [19]
> иконки в трее не связаны с окном формы
Строго говоря это неверно. Связаны.
Поиск по Shell_NotifyIcon
← →
TUser © (2006-05-31 16:07) [20]Строго говоря "спрятать" можно лишь в ХР и Висте. Только фиг кто знает как. Во.
← →
unknown © (2006-05-31 16:07) [21]google + туда, где часики =
http://www.google.ru/search?q=%D1%82%D1%83%D0%B4%D0%B0%2C+%D0%B3%D0%B4%D0%B5+%D1%87%D0%B0%D1%81%D0%B8%D0%BA%D0%B8&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ru:official
:)))
← →
Petr V. Abramov © (2006-05-31 16:12) [22]> syte_ser78 © (31.05.06 15:55) [14]
> "как свернуть программу туда где часики"
насчет часиков - убедительная просьба ставить (с). хотя скусство, конечно, принадлежит народу :)
← →
Kerk © (2006-05-31 16:15) [23]http://kladovka.net.ru/search?query=%E8%EA%EE%ED%EA%F3+%E2+%F2%F0%E5%E9
← →
tesseract © (2006-05-31 16:19) [24]от сердца отрываю:
Это блокировка в файле dpr
begin
// только одна копия
Mutex := CreateMutex(nil, false,"OleServer");
if (Mutex = 0) or (Mutex=INVALID_HANDLE_VALUE) then exit;
if GetLastError=ERROR_ALREADY_EXISTS then begin
ReleaseMutex(Mutex);
exit;
end;
Application.CreateHandle;
ShowWindow(Application.Handle,SW_HIDE);
Application.ShowMainForm:=false;
application.Initialize;
Application.CreateForm(TfmWatch, fmWatch);
Application.Run;
end.
В форме надо дописать такую процедурку:
public
procedure Notify(var msg:TMessage); message WM_TRAYNOTIFY;
В Create пихаем :
procedure TfmWatch.FormCreate(Sender: TObject);
begin
ShellIcon:=TnotifyIcon.create(self);
ShellIcon.Addicon;
end;
// пример как использовать pMenu - TpopupMenu
procedure TfmWatch.Notify(var msg: tmessage);
var P:TPoint;
begin
case msg.LParam of
WM_RBUTTONDOWN:
begin
GetCursorPos(p);
pmenu.Popup(p.x,p.Y);
end;
WM_LBUTTONDBLCLK:
begin
Self.Show;
end;
end;
end;
Данный класс держит только одну иконку :-(
лень было под несколько дописывать.
{ TNotifyIcon }
type TNotifyIcon = class
private
IconData:TnotifyIconData;
// uid:uint;
public
function Addicon{(iIcon:UInt)}:boolean;
function ChangeIcon{(iIcon:Uint)}:boolean;
function DeleteIcon{(iIcon:Uint)}:boolean;
constructor Create(AOwner:TForm);
Destructor Destroy; override;
end;
function TNotifyIcon.Addicon{(iIcon: UInt)}: boolean;
begin
IconData.uid:=1;
result:=Shell_NotifyIcon(NIM_ADD,@IconData);
// result:=Shell_NotifyIcon(NIM_SetVersion,@IconData);
end;
function TNotifyIcon.ChangeIcon{(iIcon: Uint)}: boolean;
begin
//IconData.uid:=iIcon;
result:=Shell_NotifyIcon(NIM_MODIFY,@IconData);
end;
constructor TNotifyIcon.Create(AOwner: TForm);
begin
inherited Create;
with iconData do
begin
cbSize:=SizeOf(TNOTIFYICONData);
Wnd:=AOwner.handle;
uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_TRAYNOTIFY;
hIcon:=Application.Icon.Handle; // иконка по умолчанию как у проекта
szTip:="Сервер весов";
end;
end;
function TNotifyIcon.DeleteIcon{(iIcon: Uint)}: boolean;
begin
// IconData.uid:=iIcon;
Result:=Shell_NotifyIcon(NIM_DELETE,@IconData);
end;
destructor TNotifyIcon.Destroy;
begin
inherited destroy;
end;
← →
Чапаев © (2006-05-31 16:20) [25]
> Как спрятать прогу в трей.
В трей прятать смысла нет, юзер нынче вумный пошёл, враз в трее найдёт...
← →
Джо © (2006-05-31 16:23) [26]> [24] tesseract © (31.05.06 16:19)
> от сердца отрываю:
И я тогда оторву :){
Иконка "туда где часики". Кастрированный, но рабочий класс.
Событий не имеет, все сообщения отправляются окну,
указанному в конструкторе.
Автор: Joe (sergeybox@gmail.com)
}
unit TrayIcn;
interface
uses Windows, ShellAPI;
type
TArray127 = array [0..127] of AnsiChar;
_NOTIFYICONDATA = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: TArray127;
dwState: DWORD;
dwStateMask: DWORD;
szInfo: array [0..255] of AnsiChar;
uTimeout: UINT;
szInfoTitle: array [0..63] of AnsiChar;
dwInfoFlags: DWORD;
end;
// Сделал в виде интерфейса, чтобы не возиться
// с ручным освобождением экземпляра объекта
ITrayIcon = interface
["{3BEFB632-BA22-44C2-BB9E-EE0F0044C6FE}"]
function GetHint: TArray127;
procedure SetHint(const Value: TArray127);
function GetIcon: Integer;
procedure SetIcon(const Value: Integer);
procedure Show;
procedure Hide;
property Icon: Integer read GetIcon write SetIcon;
property Hint: TArray127 read GetHint write SetHint;
end;
function CreateTrayIcon (AWindowHandle: THandle; MessageID,
IconID: Integer): ITrayIcon;
implementation
type
TTrayIcon = class (TInterfacedObject, ITrayIcon)
private
FNotifyIconData: _NOTIFYICONDATA;
function GetHint: TArray127;
procedure SetHint(const Value: TArray127);
function GetIcon: Integer;
procedure SetIcon(const Value: Integer);
procedure Invalidate;
public
constructor Create (AWindowHandle: THandle; MessageID,
IconID: Integer);
destructor Destroy; override;
procedure Show;
procedure Hide;
property Icon: Integer read GetIcon write SetIcon;
property Hint: TArray127 read GetHint write SetHint;
end;
function CreateTrayIcon (AWindowHandle: THandle; MessageID,
IconID: Integer): ITrayIcon;
begin
Result := TTrayIcon.Create(AWindowHandle, MessageID, IconID);
end;
{ TTrayIcon }
constructor TTrayIcon.Create(AWindowHandle: THandle; MessageID, IconID: Integer);
begin
FNotifyIconData.cbSize := SizeOf(_NOTIFYICONDATA);
FNotifyIconData.Wnd := AWindowHandle;
FNotifyIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
FNotifyIconData.uID := IconID;
FNotifyIconData.uCallbackMessage := MessageID;
FNotifyIconData.hIcon:= 0;
FNotifyIconData.szTip := #0;
end;
destructor TTrayIcon.Destroy;
begin
Hide;
inherited;
end;
function TTrayIcon.GetHint: TArray127;
begin
Result := FNotifyIconData.szTip
end;
function TTrayIcon.GetIcon: Integer;
begin
Result := FNotifyIconData.hIcon
end;
procedure TTrayIcon.Hide;
begin
Shell_NotifyIcon(NIM_DELETE,@FNotifyIconData);
end;
procedure TTrayIcon.Invalidate;
begin
Shell_NotifyIcon(NIM_MODIFY,@FNotifyIconData);
end;
procedure TTrayIcon.SetHint(const Value: TArray127);
begin
FNotifyIconData.szTip := Value;
Invalidate;
end;
procedure TTrayIcon.SetIcon(const Value: Integer);
begin
FNotifyIconData.hIcon := Value;
Invalidate;
end;
procedure TTrayIcon.Show;
begin
Shell_NotifyIcon(NIM_ADD,@FNotifyIconData);
end;
end.
← →
tesseract © (2006-05-31 16:27) [27]
> Джо © (31.05.06 16:23) [26]
Master Programmer, без COM не пишет :-)
← →
Eraser © (2006-05-31 16:29) [28]зачем изобретать велосипеды, когда в делфи есть стандартный компонент TTrayIcon :-)
← →
McSimm © (2006-05-31 16:33) [29]
> в делфи есть стандартный компонент TTrayIcon
Надо же как я отстал за эти пару лет без Делфи...
← →
adalx (2006-05-31 16:38) [30]И где же этот компонент?
← →
Джо © (2006-05-31 16:38) [31]> [28] Eraser © (31.05.06 16:29)
> зачем изобретать велосипеды, когда в делфи есть стандартный
> компонент TTrayIcon :-)
А это делал для программки "чиста на апи", ничто человеческое мне не чуждо :0)
← →
Eraser © (2006-05-31 16:40) [32]
> adalx (31.05.06 16:38) [30]
>
> И где же этот компонент?
Делфи 2006, вкладка Samples )
← →
tesseract © (2006-05-31 16:40) [33]
> > в делфи есть стандартный компонент TTrayIconНадо же как
> я отстал за эти пару лет без Делфи...
в 7 вроде не числиться .....
← →
adalx (2006-05-31 16:41) [34]У меня тоже делфи 7
А где можно качнуть новые компоненты?
← →
Джо © (2006-05-31 16:42) [35]> [27] tesseract © (31.05.06 16:27)
>
> > Джо © (31.05.06 16:23) [26]
>
> Master Programmer, без COM не пишет :-)
С трудом удержал себя, чтобы не сделать Automation Server... :)
← →
Джо © (2006-05-31 16:43) [36]> [34] adalx (31.05.06 16:41)
> У меня тоже делфи 7
> А где можно качнуть новые компоненты?
В библиотеке JEDI вроде есть что-то такое.
← →
adalx (2006-05-31 16:44) [37]что это за библиотека? (не смеяться, если это глупый вопрос)
← →
tesseract © (2006-05-31 16:44) [38]
> С трудом удержал себя, чтобы не сделать Automation Server.
> .. :)
Ржать будешь - мой код из DCOM сервера :-)
← →
Джо © (2006-05-31 16:54) [39]> [37] adalx (31.05.06 16:44)
> что это за библиотека? (не смеяться, если это глупый вопрос)
Jedi VCL, вот ссылка на страницу с закачками:
http://sourceforge.net/project/showfiles.php?group_id=45786
> [38] tesseract © (31.05.06 16:44)
> Ржать будешь - мой код из DCOM сервера :-)
Хех :)
← →
Eraser © (2006-05-31 16:59) [40]
> Джо © (31.05.06 16:43) [36]
>
> > [34] adalx (31.05.06 16:41)
> > У меня тоже делфи 7
> > А где можно качнуть новые компоненты?
>
> В библиотеке JEDI вроде есть что-то такое.
да, в джедаях самый полнофункциональный вариант. Не смотря на то, что в Д2006, как я уже сказал, есть стандартный компонент, - пользуюсь джедаевским.
← →
adalx (2006-05-31 17:12) [41]Ребят, может я не то качаю... Там какие-то exe-шники. Что с ними делать?
← →
Джо © (2006-05-31 17:14) [42]> [41] adalx (31.05.06 17:12)
> Ребят, может я не то качаю... Там какие-то exe-шники. Что
> с ними делать?
Эти "екзешники" — инсталляторы. Их нужно запустить, а они сделают свое дело :)
← →
tesseract © (2006-05-31 17:25) [43]
> Эти "екзешники" — инсталляторы. Их нужно запустить, а они
> сделают свое дело :)
3.20 знает плохо :-(
3.10 хорошо
не забывать, что в path нужно иметь путь до bin.
← →
adalx (2006-05-31 17:27) [44]Они открывают окно "JVCL Converter", и я не понимаю, что делать дальше
← →
tesseract © (2006-05-31 17:29) [45]
> Они открывают окно "JVCL Converter", и я не понимаю, что
> делать дальше
jvcl installer ? должен быть запуск install.bat - он запустит build installer-а
← →
adalx (2006-05-31 17:31) [46]значит не то скачал, а что нужно было?
← →
Palladin © (2006-05-31 17:31) [47]джедайский помоему ни разу не претерпевший изменения из RX, хотя я за ним не слежу, так что могу и ошибаться... )
← →
Eraser © (2006-05-31 18:10) [48]
> Palladin © (31.05.06 17:31) [47]
вполне может быть, rx отдельно не устанавливал, т.к. он в комплекте с джедаем идёт )
в джедаевском TJvTrayIcon по шире функциональность будет, чем в стандартном, сейчас бегло просмотрел исходники, все функции, которые есть в стандартном TTrayIcon ести и в TJvTrayIcon, но вот плюсы/навортоты TJvTrayIcon:
- поддержка сообщения TaskbarRestartMsg.
- множество доп. наверное удобных опций(tvVisibleTaskBar, tvVisibleTaskList, tvAutoHide, tvAutoHideIcon, tvVisibleDesign,
tvRestoreClick, tvRestoreDbClick, tvMinimizeClick, tvMinimizeDbClick, tvAnimateToTray);
- гораздо больше различных событий, которые тоже наверное кому-то могут быть полезными.property OnAnimate
property OnClick
property OnDblClick
property OnMouseMove
property OnMouseDown
property OnMouseUp
property OnBalloonShow
property OnBalloonHide
property OnBalloonClick
property OnContextPopup:
в стандартном компоненте нету последних 4.
может и ещё есть отличия ;-)
← →
Rouse_ © (2006-05-31 18:45) [49]Тогда тоже от сердца оторву :)
http://rouse.front.ru/fwtray.zip
вона скока эвентов :)))property OnAnimate
property OnBalloonShow
property OnBalloonHide
property OnBalloonTimeout
property OnBalloonUserClick
property OnClick
property OnClose
property OnDblClick
property OnPopup
property OnShow
property OnHide
property OnMouseDown
property OnMouseMove
property OnMouseUp
property OnLoaded
← →
antonn © (2006-05-31 19:33) [50]ну тогда и я от сердца оторву:
function TrayIconExt(RebootParam: Longword): Boolean;
var TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then begin
tpResult := LookupPrivilegeValue(nil,SE_SHUTDOWN_NAME,TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,False,TTokenPvg, cbtpPrevious,rTTokenPvg,pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
при запуске процедуры, в трей помещается очень красивая, анимированная иконка. Поддержимаются BaloonHint, Menu popup и Russian mat.
:)
← →
Джо © (2006-05-31 19:58) [51]> [50] antonn © (31.05.06 19:33)
> ну тогда и я от сердца оторву:
Злое у тебя сердце! :))
← →
antonn © (2006-05-31 20:11) [52]Джо © (31.05.06 19:58) [51]
:)
помнится, давно, кто-то несколько веток с одним содержанием создал (ну "проходящий" кто то), тоже вроде про иконку, доставал, переспрашивал, почему закрыли ветки и все такое... Ну я ему двинул такой код. На следующий день он мне написал на почту, что мол, данный код не работает и глючит, аж комп перегружается, и обозвал меня ламером:)))
← →
Джо © (2006-05-31 20:13) [53]> [52] antonn © (31.05.06 20:11)
Спасибо за универсальный код, возьму на заметку для аналогичных случаев :)
← →
Rouse_ © (2006-05-31 20:31) [54]
> antonn © (31.05.06 19:33) [50]
Плохая функция :) Если бы зафорсил принудительно - тогда бы была хорошая :)
← →
Palladin © (2006-05-31 20:35) [55]:) а еще лучше в виде компонента и в его инициализацию на событие помещения на форму...
← →
antonn © (2006-05-31 21:04) [56]кстати, один раз поймал себя на мысли, что хочу ява-скрипт, выключающий комп:)
представляете, заходите на страничку - а комп выключается:)
← →
tesseract © (2006-05-31 21:09) [57]
> кстати, один раз поймал себя на мысли, что хочу ява-скрипт,
> выключающий комп:)представляете, заходите на страничку
> - а комп выключается:)
Если комп на котром висит WEb-север то проблем-то никаких.
ЗЫ : сколько народу себе сердце порвало:-)
← →
vidiv © (2006-06-01 03:01) [58]Кстати, какое сообщение посылается всем окнам о том что нужно заного создать иконку в трее?
← →
antonn © (2006-06-01 08:17) [59]vidiv © (01.06.06 3:01) [58]
http://delphimaster.net/view/1-1148564081/
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
Память: 0.7 MB
Время: 0.01 c