Bileşeni tutarken nasıl şeffaf hale getirilir?
Saydam alanlı PNG görüntüsünü içeren bir forma sahip olan programı yapmam gerekiyor. Form görünmez olmalı, görüntü görünür kalmalı ve şeffaf alan şeffaf kalmalıdır. Sorun görüntü şeffaflığıdır. Bu durumda, ana form şeffaftır, görünmezdir, tüm bileşenler/kontroller görünür durumda kalır. Ancak, PNG görüntüsünün şeffaf alanı saydamlık taşımaz. Şeffaflık nasıl korunur?
procedure MakeTransparent;
var
AControl: TControl;
A, Margin, X, Y, CtlX, CtlY: Integer;
begin
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
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;
SetWindowRgn(Handle, FullRgn, True);
end;
procedure UndoTransparency;
begin
FullRgn := CreateRectRgn(0, 0, Width, Height);
CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn(Handle, FullRgn, True);
end;
Sadece bir poke :-) İlk ekran görüntüsünde görüntünün gerçekten şeffaf olduğundan emin misiniz? – TLama
100% transparent :) –
Saydam bir form oluşturmuyorsunuz, formun şeklini değiştiriyorsunuz. Bunun yerine, formun "Renk", "TransparentColor" ve "TransparentColorValue" özelliklerini kullanın ve bir "TImage" öğesine bir png yükleyin ve işiniz bitti! –