Jak zrobić przezroczystą formę
winetou
Poniższa procedura wykorzystuje regiony do tworzenia przeźroczystych miejsc na formie. Należy tylko podać ścieżkę dostępu do bitmapy oraz kolor, który na tej bitmapie ma być kolorem przeźroczystym.
Procedura ta nie jest jednak doskonała. Posiada co najmiej dwie irytujące wady:
- długo się wykonuje;
- rysunek powinien mieć dość spore marginesy o kolorze przeźroczystym.
Jest to jednak całkiem ciekawa alternatywa dla takich komponentów jak CoolForm.
procedure TMainFRM.TransparentForm(BitM_S: string; Kolor: TColor);
var
LiczX, LiczY: Longint;
Region, RegTMP: HRGN;
BitM: TBitMap;
NewC, LastC: TColor;
Pocz: Longint;
begin
BitM := TBitMap.Create;
BitM.LoadFromFile(BitM_S);
Width := BitM.Width;
Height := BitM.Height;
Region := CreateRectRGN(0, 0, Width, Height);
RegTMP := CreateRectRGN(0, 0, Width, Height);
for LiczY := 0 to Height do
begin
Pocz := 0;
LastC := Kolor;
for LiczX := 0 to Width do
begin
NewC := BitM.Canvas.Pixels[LiczX, LiczY];
if (NewC = Kolor) and (LastC <> Kolor) then
Pocz := LiczX;
if ((NewC <> Kolor) and (LastC = Kolor)) or (LiczX = Width) then
begin
CombineRGN(Region, RegTMP, CreateRectRGN(Pocz, LiczY, LiczX, LiczY + 1), RGN_DIFF);
RegTMP := Region;
end;
LastC := NewC;
end;
end;
SetWindowRGN(MainFRM.Handle, Region, True);
BitM.Free;
end;
A spróbuj taką formę przesunąć i zobaczysz czy nie lepiej
Najlepiej zrobić tak:
W oncreate formy wpisać
form1.Brush.Style:=bsclear;
form1.BorderStyle:=bsnone;
U mnie procedurka wykonuje się kilka sekund, a jak dam na forme komponent Thumb (i odpowiednio zmodyfikujkę procedurkę), to mogę wyświetlać przezroczyste kształty w PNG, GIF, JPG, a nie tylko w BMP.
Dzieki ...
"Artykuł był po prostu na żywca skopiowany z notatnika z unitu jednego z moich programow (usunalem tylko znaczniki komentarza) jak będę miał trochę więcej czasu to postaram się poprawić
Fajny artykuł. Mam tylko dwie uwagi: