![]() |
|
|
#1
|
||||
|
||||
|
Всем здрасте! Кто-нить знает как можно
сделать тень вокруг формы как на Viste? Заранее Спасибо. |
|
#2
|
|||
|
|||
|
Может быть, реализовать способ кнопки (Button): левая и верхняя грани белые, нижняя и правая чёрные?
|
|
#3
|
||||
|
||||
|
Та не, мне нужна тень с переходящей полупрозрачностью,
типа такого: http://dimasoft.jino-net.ru:8080/web...OAD&FILE=2.jpg Последний раз редактировалось <<D>>, 20.07.2007 в 15:27. |
|
#4
|
||||
|
||||
|
Это не совсем по теме, но, может поможет в плане идеи, как можно сделать тень...
Я, честно говоря, сам когда-то искал, как можно сделать полупрозрачную тень, но так и не нашел ![]() Код:
procedure TForm2.DrawShadows(WDepth, HDepth : Integer);
var
Dst, RgnBox : TRect;
hOldDC : HDC;
OffScreen : TBitmap;
Pattern : TBitmap;
Bits : array[0..7] of WORD;
begin
Bits[0]:=$0055;
Bits[1]:=$00aa;
Bits[2]:=$0055;
Bits[3]:=$00aa;
Bits[4]:=$0055;
Bits[5]:=$00aa;
Bits[6]:=$0055;
Bits[7]:=$00aa;
hOldDC:=Canvas.Handle;
Canvas.Handle:=GetWindowDC(Form1.Handle);
OffsetRgn(ShadeRgn, WDepth, HDepth);
GetRgnBox(ShadeRgn, RgnBox);
Pattern:=TBitmap.Create;
Pattern.ReleaseHandle;
Pattern.Handle:=CreateBitmap(8, 8, 1, 1, @(Bits[0]));
Canvas.Brush.Bitmap:=Pattern;
OffScreen:=TBitmap.Create;
OffScreen.Width:=RgnBox.Right-RgnBox.Left;
OffScreen.Height:=RgnBox.Bottom-RgnBox.Top;
Dst:=Rect(0, 0, OffScreen.Width, OffScreen.Height);
OffsetRgn(ShadeRgn, 0, -RgnBox.Top);
FillRgn(OffScreen.Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);
OffsetRgn(ShadeRgn, 0, RgnBox.Top);
// BitBlt работает быстрее CopyRect
BitBlt(OffScreen.Canvas.Handle, 0, 0, OffScreen.Width, OffScreen.Height,
Canvas.Handle, RgnBox.Left, RgnBox.Top, SRCAND);
Canvas.Brush.Color:=clBlack;
FillRgn(Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);
BitBlt(Canvas.Handle, RgnBox.Left, RgnBox.Top, OffScreen.Width,
OffScreen.Height, OffScreen.Canvas.Handle, 0, 0, SRCPAINT);
OffScreen.Free;
Pattern.Free;
OffsetRgn(ShadeRgn, -WDepth, -HDepth);
ReleaseDC(Form1.Handle, Canvas.Handle);
Canvas.Handle:=hOldDC;
end; Комментарии : Функция рисует тень сложной формы на форме Form2. Для определения формы тени используется регион ShadeRgn, который был создан где-то раньше (например в OnCreate). Относительно регионов см. Win32 API. Титов Игорь Евгеньевич infos@obninsk.ru |
|
#5
|
||||
|
||||
|
Шота у меня не шо не полушилось.
|
|
#6
|
||||
|
||||
|
Вот тут все есть:
http://www.codeproject.com/gdi/pxalphablend.asp На всяк случай еще здесь: http://www.delphikingdom.ru/asp/answ...IDAnswer=52020 |
|
#7
|
|||
|
|||
|
2 <<D>>:
Без обид, но этой хнёй я тебе не советую заниматься, лучше переходи на Vista'у, чем пытаться сделать для неё скин... |
|
#8
|
||||
|
||||
|
от перехода на висту на других компах с другой вендой у этой проги вистовский скин не появится
так что делать такой скин может и есть смысл, если человеку хочется. |
|
#9
|
||||
|
||||
|
Есть такая прога, кажется YZ'Shadow, так вот она делает под всеми окнами на XP такую тень как на Висте. У меня она сейчас работает,
и неплохо, только не делает тень под теми окнами на которых FormStyle=fsNone. |
|
#10
|
||||
|
||||
|
Качнул я ее, эту прогу, там есть YzShadow.dll, из нее экуспортируются разные ф-ии, например menuTransparent, crateShadowAll, startHook, я попробовал поковыряться в отладчике, понял, что все эти тени делаются при помощи PostMessage к окнам, там идет перечисление всех окон в системе и отправка им каких-то сообщений, конкртнее, к сожалению, я не смог разобраться - уж большо глючно все отлаживается, в общем, если очень надо, советую эту dll поковырять. Кстати, ты можешь эту DLL и сам заюзать, только в ней не реализована возможность добавлять тень к одному окну, только ко всем, но это тоже не будет проблемой, если ты эту dll расковыряешь
![]() |