![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Механизм прорисовки скинов? [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Hecker © (2002-05-15 08:42:00)Кто-нить знает как делают скины, типа как в ВинАмпе?
Как рисовать на кэпшене формы?
Если не трудно, киньте примерчик...
SPeller (2002-05-22 12:28:00) [1]2Zyv (22.05.02 11:53)
Ну есть пара косячков. Переменную p забыл убрать, она для совершенно других целей используется. Главное что пример есть как чего делать. Я ведь не обещал полностью рабочего и отлаженного кода, а всего-лишь пример, как рисовать скины.
Zyv (2002-05-22 11:53:00) [2]2SPeller
Спасибо, я вас тоже люблю.
С головой и руками все в порядке. Да и разобраться можно, конечно, если нужно.
Только вот писать на форумы "левые примеры" большого ума тоже не надо. Объявление p:tutsettings- это "хороший тон", если учесть, что переменная не используется вообще. Да и ReleaseDCтоже не помешало бы.
SPeller (2002-05-21 19:23:00) [3]Zyv (21.05.02 16:55)
Не буду же я тебе сюда писать весь код модуля где эти переменные объявлены. Голова тебе для чего с руками? Разберись сам что к чему, объяви эти переменные, поработай и всё получится..
Zyv (2002-05-21 16:55:00) [4]2SPeller
Как-то с примером не очень получилось...
"Пример из жизни" работать должен, а не ругаться на необъявленные переменные, свойства и типы.
Если можно, с примером по-подробнее, плиз.
XMan (2002-05-21 16:29:00) [5]Andrew_k (21.05.02 15:47)
Мил человек, попробуй еще раз под 9х... ;-)
А насчет 2к - не знаю, не пробовал...
Andrew_k (2002-05-21 15:47:00) [6]2Valery_f
А ни хрена :]
У меня под 9x/2k всё пашет!
Причем это не теория, я проверяю перед тем, как
посоветовать!
valery_f (2002-05-20 15:52:00) [7]Andrew_k (18.05.02 23:42)
Оч-чень хорошее и вкусное решение, но только для Windows XP :(
Andrew_k (2002-05-18 23:42:00) [8]А сделать прозрачной часть формы, кстати, легко:
1) Устанавливаем Form1.TransparentColor в true
2) А Form1.TransparentColorValue в какое угодно значение, делаешь form1.color равным тому, чего ты захреначил в Form1.TransparentColorValue и теперь все куски формы, данного цвета, будут прозрачными.
Dorex (2002-05-18 18:57:00) [9]Прошу прощения, кто-нибудь может подсказать возможно ли добавить к кнопкам кэпшена свою, чтобы стиль у нее был, как и у стандартных? Стиль необходимо считывать и задавать "на лету", чтобы работа не зависела от системы и темы.
Игорь Шевченко (2002-05-17 15:10:00) [10]valery_f (17.05.02 14:39)
> Во-первых - DC окна в процессе работы может меняться. Во
> всяком случае - при свертывании-развертывании окон - точно.
>
Далеко не всегда...
valery_f (2002-05-17 14:39:00) [11]2 SPeller (17.05.02 10:20) Справка из хелпа по GetDC:
"After painting with a common device context, the ReleaseDC function must be called to release the device context. Class and private device contexts do not have to be released. The number of device contexts is limited only by available memory"
Во-первых - DC окна в процессе работы может меняться. Во всяком случае - при свертывании-развертывании окон - точно. Возможно, что винда не станет грохать DC, пока счетчик ссылок не обнулится релизами, но кто знает что у нее внутрях происходит?
Во вторых - ресурсы не резиновые. Разве тебе не случалось видеть, как в течение минуты GDI ресурсы уходят в ноль из-за того, что забываешь их освобождать?
В данном случае, может быть, ничего страшного не случится, но зачем этот "авось", когда разница - в одну-две строки кода? Тем более, что по хелпам - это нужно делать...
SPeller (2002-05-17 10:20:00) [12]2Hecker © (17.05.02 06:59)
procedure TfrmOpen.lblUpMouseEnter(Sender: TObject);
begin
if mupdowned then begin
bitblt(fhdc,lblup.Left,lblup.Top,24,15,imgskin.Canvas.Handle,154,119,srccopy);
uplimg:=true;
end
else if uplimg or (sender=frmopen) then begin
bitblt(fhdc,lblup.Left,lblup.Top,24,15,imgskin.Canvas.Handle,154,103,srccopy);
uplimg:=false;
end;
end;
procedure TfrmOpen.lblUpMouseLeave(Sender: TObject);
begin
if uplimg then begin
bitblt(fhdc,lblup.Left,lblup.Top,24,15,imgskin.Canvas.Handle,154,103,srccopy);
uplimg:=false;
end;
end;
procedure TfrmOpen.lblUpMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
todo:=-1;
//sleepex(100,false);
timerud.enabled:=true;
bitblt(fhdc,lblup.Left,lblup.Top,24,15,imgskin.Canvas.Handle,154,119,srccopy);
uplimg:=true;
mupdowned:=true;
end;
procedure TfrmOpen.lblUpMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
timerudoff:=true;
bitblt(fhdc,lblup.Left,lblup.Top,24,15,imgskin.Canvas.Handle,154,103,srccopy);
uplimg:=false;
mupdowned:=false;
end;
2valery_f (16.05.02 11:58)
А надо? И зачем? (
Hecker (2002-05-17 06:59:00) [13]Вот ещё вопрос по теме: КАК в ВинАмпе сделали такие настандартные кнопки?
valery_f (2002-05-16 13:28:00) [14]Игорь Шевченко (16.05.02 12:51)
Да я не о логике оформления UI (окно должно иметь ХОТЬ КАКОЙ-ТО заголовок и ТАКИЕ-ТО кнопки на нем), а об имплементации. То, что и заголовок и кнопки они делают сами (без участия винды), я думаю, очевидно. Скорее всего - какие-то операции с окном требуют того, чтобы оно имело WS_CAPTION в атрибутах. Но к скинопроизводству это отношения уже не имеет.
Игорь Шевченко (2002-05-16 12:51:00) [15]valery_f (16.05.02 12:22)
Дело не в коде, а в пользователе. Он привык жать на кнопки Close и Minimize у окна. У WinAmp"а (по крайней мере того, что стоит у меня) эти кнопки находятся на своих местах, неважно, что вид у них не совсем стандартный.
Затем и оставили :-)
С уважением,
valery_f (2002-05-16 12:22:00) [16]Игорь Шевченко (16.05.02 12:12)
Minimize или Close можно сделать и самому (по одной строке кода). К тому же размер и положение этих кнопок у винампа уж никак не совпадают с виндовыми. Да и меню у них полностью свое...
Игорь Шевченко (2002-05-16 12:12:00) [17]valery_f (16.05.02 11:58)
Для того, чтобы можно было на кнопки Minimize или Close нажать, к примеру. Как поступает любой неискушенный пользователь. :-)
С уважением,
valery_f (2002-05-16 11:58:00) [18]2 SPeller> fhdc:=getdc(hwnd) вижу, а где ReleaseDC?
2 Игорь Шевченко> Да, вижу, у главного окна винампа капшин есть, а вот у остальных - нет. Зачем-то он им понадобился именно в главном окне... Но вряд-ли для облегчения отрисовки :) Есть идеи?
Игорь Шевченко (2002-05-16 10:15:00) [19]to valery_f (15.05.02 16:40)
Нас рассудит Spy++ :-)
У WinAmp"а есть в стилях окна и WS_CAPTION и WS_SYSMENU, следовательно, WM_NCPAINT он обрабатывает.
С уважением,
Игорь Шевченко (2002-05-16 10:11:00) [20]День добрый, Hecker ©,
Работают с Region"ами. SetWindowRgn, CombineRgn и т.д.
С уважением,