Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
Вниз
Сворачивание в трей Найти похожие ветки
← →
Xmen (2008-05-20 14:10) [0]Для этого использоваль такой код
const
WM_MYICONNOTIFY = WM_USER + 123;
private
{ Private declarations }
ShownOnce: Boolean;
public
{ Public declarations }
NowDate:string;
procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
procedure WMSYSCOMMAND(var msg: TMessage);message WM_SYSCOMMAND;
procedure RestoreMainForm;
procedure HideMainForm;
procedure CreateTrayIcon(n:Integer);
procedure DeleteTrayIcon(n:Integer);
end;
var
AgentForm: TAgentForm;
implementation
uses DM;
{$R *.dfm}
procedure TAgentForm.WMICON(var msg: TMessage);
var P : TPoint;
begin
case msg.LParam of // обработка обратных сообщений
WM_LBUTTONUP: //по нажатию левой клавиши, WM_RBUTTONUP по правой
begin
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
PopupMenu1.Popup(P.X, P.Y);
end;
WM_LBUTTONDBLCLK : RestoreItemClick(Self); //как Default
end;
end;
procedure TAgentForm.WMSYSCOMMAND(var msg: TMessage);
begin
inherited; //обработка минимизирвания окна, не сворачевается а скрывается
if (Msg.wParam=SC_MINIMIZE) then
begin
HideMainForm;
CreateTrayIcon(1);
end;
end;
procedure TAgentForm.HideMainForm;
begin
//при сокрытии окна
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;
procedure TAgentForm.RestoreMainForm;
var i,j : Integer;
begin
Application.ShowMainForm := True;
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
if not ShownOnce then
begin
for I := 0 to Application.MainForm.ComponentCount -1 do
if Application.MainForm.Components[I] is TWinControl then
with Application.MainForm.Components[I] as TWinControl do
if Visible then
begin
ShowWindow(Handle, SW_SHOWDEFAULT);
for J := 0 to ComponentCount -1 do
if Components[J] is TWinControl then
ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
end;
ShownOnce := True;
end;
end;
procedure TAgentForm.CreateTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle; //HWND вашего окна (окна принимающего обратные сообщения)
uID := 1; // номер значка
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; //обрабатываемые флаги
uCallBackMessage := WM_MYICONNOTIFY;
hIcon := Application.Icon.Handle; // то откуда сдергивается значек это может быть и ImageList и т.д.
StrPCopy(szTip,"MyJobs Agent."); // всплывающая строка, может быть любой string главное с нулевым окончанием
end;
Shell_NotifyIcon(NIM_ADD, @nidata); // добавление значка
end;
procedure TAgentForm.DeleteTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata); // удаление значка
end;
procedure TAgentForm.RestoreItemClick(Sender: TObject);
begin
RestoreMainForm;
DeleteTrayIcon(1); //если убрать ремарку то при показывании основного окна значек исчезает
end;
procedure TAgentForm.FormCreate(Sender: TObject);
begin
ShownOnce:= False;
end;
procedure TAgentForm.FormDestroy(Sender: TObject);
begin
DeleteTrayIcon(1);
end;
procedure TAgentForm.FormShow(Sender: TObject);
var x,y:Integer;
begin
x:= Screen.Width-260;
y:= Screen.Height-430;
Left := x;
Top := y;
end;
end.
форма сварачивется в трей и обратно, проблема в том как его автоматический сварачиват при запуске программы?
← →
Elec3C © (2008-05-20 15:08) [1]Вот проблема а! В обработчике OnFormActivate(можно в OnFormShow) пропиши:
HideMainForm;
CreateTrayIcon(1);
P.S. Наверное, скопипастил и не изучал код вообще:\
← →
Palladin © (2008-05-20 15:10) [2]
> В обработчике OnFormActivate
жестокий ты парень...
← →
Rouse_ © (2008-05-20 15:25) [3]
> OnFormActivate
Следующий вопрос будет: как выковырять форму из трея? :)
← →
Xmen (2008-05-20 16:49) [4]Да нет сейчась меня волнует вопрос как можно сделать форму поверх всех окон. BringToFront - только один раз его помешает а мне надо сделать, чтобы он всегда был на верху.
← →
{RASkov} © (2008-05-20 16:52) [5]> [4] Xmen (20.05.08 16:49)
StayOnTop
← →
{RASkov} © (2008-05-20 16:52) [6]FormStyle=fsStayOnTop ^)
← →
Сергей М. © (2008-05-20 17:09) [7]
> проблема в том как его автоматический сварачиват при запуске
> программы
А нафига ее "сворачивать", если ее можно просто не показывать при старте ?ShowMainForm := False;
в файле проекта - и вуаля !)
> мне надо сделать, чтобы он всегда был на верху
Экие нескромные у тебя желания)
А ежели какой-нить Ymen, изобретатель аналогичной по амбициям программы, возжелает того же самого ? Как будете с ним этот самы "поверх" делить ?
Сверху всегда кто-то один, но смена позиции партнеров законом не запрещена)
← →
Сергей М. © (2008-05-20 17:10) [8]
> как выковырять форму из трея?
Выпуздырить ?)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c