Главная страница
    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, как я уже сказал, есть стандартный компонент, - пользуюсь джедаевским.



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

Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.011 c
2-1149577608
JTAG
2006-06-06 11:06
2006.06.25
Господа подскажите плз, работаю с таблицей StringGrid,


4-1143474014
ZeBriD
2006-03-27 19:40
2006.06.25
Перехват содержимого TMemo другой программы


3-1146207610
Некто
2006-04-28 11:00
2006.06.25
X*Y*H


2-1149774642
Nikolaich
2006-06-08 17:50
2006.06.25
Как программно переместить splitter?


2-1149644505
Никос
2006-06-07 05:41
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский