![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
UpdateLayerWindow [XP]
Nightmare © (2007-11-16 20:05:00)Здравствуйте, я использую в своей программе для вывода интерфейса ULW и возникла такая проблема, как только в таймере начинает работать ULW и курсор не находится в области формы, то загрузка процессора составляет 0%, а как только я навожу курсор на форму то загрузка процессора увеличивается до 50%, хотя ничего по сути не меняется и обновление происходит точно также.
Может кто нибудь знает как это убрать?
P.S. для работы потребуется GDI+, и img я брал размером 1024Х768
var
pt1, pt2: TPoint;
sz: TSize;
bf: TBlendFunction;
DC: HDC;
Bmp: TBitmap;
procedure TFrm.FormCreate(Sender: TObject);
begin
Timer1.enabled:=False;
end;
procedure TFrm.Button1Click(Sender: TObject);
var
H: HBitmap;
Bitmap: TGPBitmap;
begin
Bitmap:=TGPBitmap.Create('Img.png');
Bmp:=TBitmap.Create;
Bitmap.GetHBITMAP(0,H);
Bmp.Handle:=H;
Timer1.Enabled:=true;
end;
procedure TFrm.Timer1Timer(Sender: TObject);
begin
if SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_LAYERED) = 0 then ShowMessage(SysErrorMessage(GetLastError));
Width:=bmp.Width;
Height:=bmp.Height;
DC := GetDC(0);
sz.cx := Width;
sz.cy := Height;
pt1 := Point(Left, Top);
pt2 := Point(0,0);
with bf do begin
BlendOp := AC_SRC_OVER;
BlendFlags := 0;
SourceConstantAlpha := 255;
AlphaFormat := AC_SRC_ALPHA;
end;
UpdateLayeredWindow(Handle, DC, @pt1, @sz, bmp.Canvas.Handle, @pt2, 0, @bf, ULW_ALPHA);
ReleaseDC(0,DC);
end;
Nightmare (2007-11-17 17:00:00) [21]Напрашивается только один вывод - хреновый делфи. Это если учитывать что
винамп работает у меня нормально.
antonn (2007-11-17 16:54:00) [22]работает, и даже 1152*864
Nightmare (2007-11-17 16:36:00) [23]Или если у тебя нет GDI+ то сделай в своём коде Bitmap размером 1024Х768
Nightmare (2007-11-17 16:34:00) [24]а мой код как работает, ну естественно если один раз делать
if SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_LAYERED) = 0 then ShowMessage(SysErrorMessage(GetLastError));
и убратьDC := GetDC(0);в таймере
и брать Img размером 1024Х768
antonn (2007-11-17 16:03:00) [25]мой - нормально. и даже в таймере
Nightmare (2007-11-17 15:49:00) [26]Я уже давно вынес, но это всё равно не помогает.
antonn, а у тебя этот код разве нормально работает?
antonn (2007-11-17 15:34:00) [27]DC := GetDC(0); вынеси из таймера
Nightmare (2007-11-17 15:08:00) [28]Я тут обнаружил ещё одну интересную вещь. Если запустить винамп(скин должен быть с альфа каналом) вместе с моим приложением и навести курсор на винамп, то моё приложение начинает ести 50% от процессора.
Странно, да.
Nightmare (2007-11-17 14:07:00) [29]Ладно начнём с другого конца: ULW насколько я знаю недаёт компонентам перерисовываться перехватыя сообщение WM_Paint.Так Да?
antonn (2007-11-17 14:02:00) [30]она много раз делает setcursor() :))
и еще маусмув посылает :)
Nightmare (2007-11-17 14:00:00) [31]Ладно другой вопрос: Что происходит с формой если на нее навести мышку?
Nightmare (2007-11-17 13:33:00) [32]Alienware Invader и анимация и альфа канал(правда весит ~30мб).
homm (2007-11-17 13:30:00) [33]> [18] Nightmare (17.11.07 13:28)
> В винампе есть скины с тенью,
И анимацией, ага?
Как часто твоя анимация обновляется.
> Карточка (не смейтесь) Radeon 9600
Здесь нет ничего смешного. Вполне достаточно для тебуемых тебе вещей, только не в виндовс.
Nightmare (2007-11-17 13:28:00) [34]
> Да ну? О_0 и как это чудо увидеть?
В винампе есть скины с тенью, кроме как ULW тень на рабочий стол не сделать.
Тени у мыши нету, стандартный курсор Xp.
Карточка (не смейтесь) Radeon 9600
homm (2007-11-17 13:24:00) [35]Ты тень у мыши отключил? Какая карточка ответил?
homm (2007-11-17 13:22:00) [36]> [14] Nightmare (17.11.07 13:21)
> В винампе тоже ULW, с той же анимацией,
Да ну? О_0 и как это чудо увидеть?
Nightmare (2007-11-17 13:22:00) [37]BDS 2006
Nightmare (2007-11-17 13:21:00) [38]В винампе тоже ULW, с той же анимацией, и ест он столько же, как и моя форма если на неё не наводить мышку.
antonn (2007-11-17 13:18:00) [39]
> Веть в винампе как-то сделали.
странно, но насколько я понимаю, в винампе обычными регионами вырезается форма, на которой блитятся картинки...
какая версия дельфи?
homm (2007-11-17 13:16:00) [40]> [11] Nightmare (17.11.07 13:13)
> Веть в винампе как-то сделали.
что там сделали?