Форум: "WinAPI";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
ВнизDrawAnimatedRects не работает в Vista/Win7 Найти похожие ветки
← →
POP (2010-06-11 17:32) [0]Код ниже (анимация сворачивания в сторону Трея) работает под WinXP, но не работает под Vista/Win7 (форма просто исчезает, без анимации):
var
ARect: TRect;
Wnd, Wnd2: HWND;
begin
Wnd:= FindWindow("Shell_TrayWnd", nil);
Wnd2:= FindWindowEx(Wnd, 0, "TrayNotifyWnd", nil);
GetWindowRect(Wnd2, ARect);
DrawAnimatedRects(Form1.Handle, IDANI_CAPTION, BoundsRect, ARect);
..
FindWindow, FindWindowEx, GetWindowRect, DrawAnimatedRects отрабатывают без ошибок, проверял специально на результат каждую функцию.
Работаю в Delphi 2007.
Если установить Application.MainFormOnTaskbar:= true; и поставить DrawAnimatedRects(Application.MainForm.Handle, IDANI_CAPTION, BoundsRect, ARect); - то это ничего не меняет.
В чем может быть причина неработоспособности?
← →
POP (2010-06-11 17:42) [1]Сейчас посмотрел, в LightAlloy, на который все ориентируются и говорят - вот, хочу такую же анимацию сворачивания в трей, и в том под Vista/Win7 не работает анимация.
Надо разобраться.
← →
DVM © (2010-06-11 20:27) [2]вот погляди, альтернативный способ заставить окно сворачиваться туда куда тебе нужно:
program shhook;
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
if PSHELLHOOKINFO(lParam)^.WindowHandle = wnd then
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.
← →
POP (2010-06-11 20:30) [3]Нда.. слишком много кода.. надо разбираться.
Но вот поднятая проблема интересует, неужели в Vista/Win7 функцию DrawAnimatedRects аннулировали.. такого не может быть.
Вроде просто все.
← →
Виталий____ (2010-06-23 13:49) [4]Под вистой/семеркой у меня например криво работает AnimateWindow, так что скорей всего Ваш случай наоборот ничем не удивителен.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c