Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: 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, как я уже сказал, есть стандартный компонент, - пользуюсь джедаевским.



Страницы: 1 2 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.038 c
15-1149143398
Игорь Шевченко
2006-06-01 10:29
2006.06.25
Offtopic: Ищется квартира в Москве на предмет снять :)


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


11-1129044663
mdw
2005-10-11 19:31
2006.06.25
MCKfakeClasses, PActionList и KOLAdd


4-1143463865
Sorcerer
2006-03-27 16:51
2006.06.25
Полупрозрачный MessageBox


2-1149512127
VitV
2006-06-05 16:55
2006.06.25
interbase+delphi удаление блоб