Programowanie w języku Delphi » FAQ

Jak zrobić przezroczystą formę

  • 2006-06-16 23:46
  • 5 komentarzy
  • 795 odsłon
  • Oceń ten tekst jako pierwszy
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;

5 komentarzy

brodny 2004-09-13 22:12

A spróbuj taką formę przesunąć i zobaczysz czy nie lepiej

STEPIEN 2003-06-14 20:04

Najlepiej zrobić tak:
W oncreate formy wpisać

form1.Brush.Style:=bsclear;
form1.BorderStyle:=bsnone;

Krzemin 2003-04-19 12:04

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.

winetou 2002-11-21 00:33

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ć

Dryobates 2002-11-20 19:45

Fajny artykuł. Mam tylko dwie uwagi:
1. Używaj polskich liter diakrytycznych (ą, ę itp.)
2. Poczytaj artykuł o kodowaniu tutaj na stronie.