Форум: "Основная";
Текущий архив: 2004.01.26;
Скачать: [xml.tar.bz2];
ВнизМожно ли сделать форму прозрачной а компоненты на ней нет Найти похожие ветки
← →
zioza (2004-01-12 10:51) [0]Заранее спасибо
← →
[lamer]Barmaglot (2004-01-12 10:52) [1]Форму прозрачной - мутно, но можно, копай в направлении AlphaBlend и т.д.
Компоненты обычными - запросто, просто ничего не меняй...
← →
NAlexey (2004-01-12 11:24) [2]AlphaBlend не поможет. Компоненты тоже будут все прозрачные. На мой взгляд необходиом работать с регионами. Создавай Rectangtle регион по ClientRect формы и исключай из него регионы компонентов потом делай форме SetWindowRegion.
← →
User_Name (2004-01-12 11:48) [3]Возможно это поможет
procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
// убираем сколлбары, чтобы не мешались
// при изменении размеров формы
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.Resize;
begin
inherited;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
// определяем относительные координаты клиенской части
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn:= CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
for I:= 0 to ControlCount -1 do
with Controls[I] do begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +
Width, ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
// устанавливаем новый регион окна
SetWindowRgn(Handle, FullRgn, True);
end;
← →
хамло (2004-01-12 11:50) [4]так это уже не прозрачность, а "дырявость" ))
← →
Horol (2004-01-12 19:12) [5]должно работать на 2000 винде точно
пробуй
procedure TForm1.Button1Click(Sender: TObject);
var
AControl : TControl;
A, Margin, X, Y, CtlX, CtlY : Integer;
begin
Margin := ( Width - ClientWidth ) div 2;
//First, get form region
FullRgn := CreateRectRgn(0, 0, Width, Height);
//Find client area region
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );
//"Mask" out all but non-client areas
CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF );
//Now, walk through all the controls on the form and "OR" them
// into the existing Full region.
for A := 0 to ControlCount - 1 do begin
AControl := Controls[A];
if ( AControl is TWinControl ) or ( AControl is TGraphicControl )
then with AControl do begin
if Visible then begin
CtlX := X + Left;
CtlY := Y + Top;
CtlRgn := CreateRectRgn( CtlX, CtlY, CtlX + Width, CtlY + Height );
CombineRgn( FullRgn, FullRgn, CtlRgn, RGN_OR );
end;
end;
end;
//When the region is all ready, put it into effect:
SetWindowRgn(Handle, FullRgn, TRUE);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FullRgn := CreateRectRgn(0, 0, Width, Height);
CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn(Handle, FullRgn, TRUE);
end;
← →
Horol (2004-01-12 19:13) [6]тфу, забыл
var
Form1: TForm1;
fullrgn, clientrgn, ctlrgn:hrgn;
← →
zioza (2004-01-15 10:15) [7]Спасибо
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c