![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сделать на всей форме (в т.ч. и ее контролах) прозрачность. w9x [D6, Win95/98, WinME]
xrip © (2002-05-23 22:48:00)Сделать например как в винампе теже скины, т.е. например розовый цвет на всей форме сделать прозрачным. пробовал делать маленькие треугольнички(СreatePolygonRgn), но сами понимаете что это гемор и тормозуха... Подскажите более грамотный алгоритм пли.
easy (2002-05-27 12:51:00) [1]//перевод с бейсика
procedure tform1.lGetRegion(pic:TImage{имидж с картинкой}; lBackColor:TColor{цвет, который станет прозрачным});
var
lRgn,lSkinRgn,lStart,lX,lY,lHeight,lWidth: Longword;
begin
lSkinRgn := CreateRectRgn(0,0,0,0);
lHeight:=pic.Height;
lWidth:=pic.Width;
For lX := 0 To (lHeight - 1) do
begin
lY := 0;
While lY < lWidth do
begin
While (lY < lWidth) And (GetPixel(pic.Canvas.Handle , lY, lX) = lBackColor) do
lY := lY + 1;
If lY < lWidth Then
begin
lStart := lY;
While (lY < lWidth) And (GetPixel(pic.Canvas.Handle, lY, lX) <> lBackColor) do
lY := lY + 1;
If lY > lWidth Then lY := lWidth;
lRgn := CreateRectRgn(lStart, lX, lY, lX + 1);
CombineRgn (lSkinRgn, lSkinRgn, lRgn, RGN_OR);
DeleteObject (lRgn);
end;
end;
end;
SetWindowRgn (form1.Handle, lSkinRgn, True);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
lgetregion(image1,form1.TransparentColorValue);
end;
Raptor (2002-05-25 17:25:00) [2]Вот зайди туда _САМ_ и почитай как это делается.
А если надо все разжевать, то тебе сюда http://delphigfx.mastak.ru/2d/002/2d_2.htm
В конце статьи есть ссылка на примеры с подробными комментариями.
xrip (2002-05-24 16:16:00) [3]Еслибы мне нужно было готовое решение я бы первым делом полез искать модуль. Мнебы кто объяснил как это грамотно реализовать _САМОМУ_!
ION T (2002-05-23 23:32:00) [4]www.utilmind.com--->Freeware--->TGlassy