|
#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 THE CRACKER IS OUT THERE |
#5
|
||||
|
||||
Шота у меня не шо не полушилось.
Кому я должен - всем прощаю!!!! |
#6
|
||||
|
||||
Вот тут все есть:
http://www.codeproject.com/gdi/pxalphablend.asp На всяк случай еще здесь: http://www.delphikingdom.ru/asp/answ...IDAnswer=52020 THE CRACKER IS OUT THERE |
#7
|
|||
|
|||
2 <<D>>:
Без обид, но этой хнёй я тебе не советую заниматься, лучше переходи на Vista'у, чем пытаться сделать для неё скин... |
#8
|
||||
|
||||
от перехода на висту на других компах с другой вендой у этой проги вистовский скин не появится так что делать такой скин может и есть смысл, если человеку хочется.
|
#9
|
||||
|
||||
Есть такая прога, кажется YZ'Shadow, так вот она делает под всеми окнами на XP такую тень как на Висте. У меня она сейчас работает,
и неплохо, только не делает тень под теми окнами на которых FormStyle=fsNone. Кому я должен - всем прощаю!!!! |
#10
|
||||
|
||||
Качнул я ее, эту прогу, там есть YzShadow.dll, из нее экуспортируются разные ф-ии, например menuTransparent, crateShadowAll, startHook, я попробовал поковыряться в отладчике, понял, что все эти тени делаются при помощи PostMessage к окнам, там идет перечисление всех окон в системе и отправка им каких-то сообщений, конкртнее, к сожалению, я не смог разобраться - уж большо глючно все отлаживается, в общем, если очень надо, советую эту dll поковырять. Кстати, ты можешь эту DLL и сам заюзать, только в ней не реализована возможность добавлять тень к одному окну, только ко всем, но это тоже не будет проблемой, если ты эту dll расковыряешь
THE CRACKER IS OUT THERE |