Форум: "WinAPI";
Текущий архив: 2013.08.25;
Скачать: [xml.tar.bz2];
ВнизСвернуть окно Найти похожие ветки
← →
Deltas © (2010-02-18 01:14) [0]Когда главное окно сворачивается, то показывается анимация его уменьшения по направлению к соответсвующей ему кнопке на панели задач. Подскажите, пожалуйста, как сделать так, чтобы окно уменьшалось по направлению к области уведомлений (системному трею), так, если бы соответствующая кнопка панели задач была в правом нижнем углу экрана. Такую фишку провернули в Касперском 5.
← →
brother © (2010-02-18 06:47) [1]Кажется была подобная тема, попробуй поиск по сайту...
← →
DVM © (2010-02-18 11:06) [2]
> Deltas ©
Ну раз уж Касперский провернул, то и мы смогем. Координаты области уведомлений или иконки вычислишь сам.
Как то так вот:
{******************************************************************************}
{* Демонстрация работы HSHELL_GETMINRECT *}
{* (c)2003 Дмитрий Муратов *}
{* e-mail: dvmuratov@yandex.ru *}
{* Данный код создан исключительно в демонстрационных целях *}
{******************************************************************************}
program ShellHookDemo;
uses
Windows, Messages, SysUtils;
const
RSH_DEREGISTER = 0;
RSH_REGISTER = 1;
RSH_REGISTER_PROGMAN = 2;
RSH_REGISTER_TASKMAN = 3;
HSHELL_ACTIVATESHELLWINDOW = 3;
HSHELL_WINDOWCREATED = 1;
HSHELL_WINDOWDESTROYED = 2;
HSHELL_WINDOWACTIVATED = 4;
HSHELL_GETMINRECT = 5;
HSHELL_REDRAW = 6;
HSHELL_TASKMAN = 7;
HSHELL_LANGUAGE = 8;
type
PSHELLHOOKINFO = ^TSHELLHOOKINFO;
TSHELLHOOKINFO = packed record
WindowHandle : HWND;
rc: TSmallRect;
end;
var
wc: TWndClassEx;
MainWnd: HWND;
Mesg: TMsg;
WM_ShellHook:Integer;
xPos, yPos, nWidth, nHeight: Integer;
osInfo: OSVERSIONINFO;
procedure RegisterShellHook(Wnd:hWnd;n:dword); stdcall;external "shell32.dll" index 181;
//------------------------------------------------------------------------------
function WindowProc(wnd: HWND; Msg: Integer; Wparam: Wparam; Lparam: Lparam): Lresult; stdcall;
begin
if msg = wm_shellhook then
begin
case wparam of
HSHELL_GETMINRECT:
begin
with PSHELLHOOKINFO(lParam)^.rc do
begin
Left := 10;
Top := 10;
Right := 20;
Bottom := 20;
end;
Result := 1;
end
else
Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
end
else
case msg of
wm_destroy :
begin
postquitmessage(0);
Result := 0;
exit;
end;
else
Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
End;
//------------------------------------------------------------------------------
begin
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="ShellHookDemo";
if RegisterClassEx (wc) = 0 then
MessageBox (0, "Invalid class registration", "Error", MB_OK)
else
begin
xPos:=100; yPos:=150;
nWidth:=430; nHeight:=250;
MainWnd:=CreateWindowEx(
0,
"ShellHookDemo",
"ShellHookDemo",
ws_overlappedwindow,
xPos,
yPos,
nWidth,
nHeight,
0,
0,
Hinstance,
nil
);
if MainWnd = 0 then
MessageBox (0, "Window not created", "Error", MB_OK)
else
begin
ShowWindow(MainWnd,CmdShow);
WM_ShellHook := RegisterWindowMessage("SHELLHOOK");
if WM_ShellHook<>0 then
begin
osInfo.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
GetVersionEx(osInfo);
RegisterShellHook(0, 1);
if(osInfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) then
RegisterShellHook(MainWnd, RSH_REGISTER)
else
RegisterShellHook(MainWnd, RSH_REGISTER_TASKMAN);
end;
SendMessage(GetDesktopWindow, $400, 0, 0);
while GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end;
end;
end.
← →
DVM © (2010-02-18 11:09) [3]Ах, да, забыл сказать, код выше заставит все окна сворачиваться в угол, если надо свое только окно, то проверять надо WindowHandle в:
PSHELLHOOKINFO = ^TSHELLHOOKINFO;
TSHELLHOOKINFO = packed record
WindowHandle : HWND;
rc: TSmallRect;
end;
← →
Deltas © (2010-02-18 11:30) [4]Спасибо! :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2013.08.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c