Delphi FAQ

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;
FAQ

5 komentarzy

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:

  1. Używaj polskich liter diakrytycznych (ą, ę itp.)
  2. Poczytaj artykuł o kodowaniu tutaj na stronie.