Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
11-1128971323
NightLord
2005-10-10 23:08
2006.06.25
TKOLTreeView


3-1146571342
Суслик
2006-05-02 16:02
2006.06.25
Распределенные транзакции в MSSQL Server


11-1129183342
GMax
2005-10-13 10:02
2006.06.25
TKOLThread - ошибка ?


1-1147948811
BeckLee
2006-05-18 14:40
2006.06.25
Не возвращается фокус


2-1149278751
Vitv
2006-06-03 00:05
2006.06.25
Ошибка при создании потока!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский