Форум: "Прочее";
Текущий архив: 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.012 c