Вниз
Скачать: CL | DM;

Трей   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.6 MB
Время: 0.04 c
15-1148836161
Efir
2006-05-28 21:09
2006.06.25
Эфиродинамика


15-1149120248
vidiv
2006-06-01 04:04
2006.06.25
Раздел математики


15-1148972466
TButton
2006-05-30 11:01
2006.06.25
тех.док.


15-1148881568
Ega23
2006-05-29 09:46
2006.06.25
С Днём рождения! 29 мая


2-1149757702
Gamer
2006-06-08 13:08
2006.06.25
Изменение размера выпавшего окна ComboBox




   Наверх