var
RGN: THandle;
function CreateRGN(Bmp: TBitmap; TransparentColor: TColor): THandle;
var
X, Y: Integer;
PixRGN: THandle;
begin
Result := CreateRectRGN(0, 0, Bmp.Width, Bmp.Height);
for Y := 0
to Bmp.Height - 1
do
for X := 0
to Bmp.Width - 1
do
if Bmp.Canvas.Pixels[X, Y] = TransparentColor
then
begin
PixRGN := CreateRectRGN(X, Y, X + 1, Y + 1);
try
CombineRGN(Result, Result, PixRGN, RGN_DIFF);
finally
DeleteObject(PixRGN);
end;
end;
end;
//Erstellt nur eine Beispiel-Bitmap mit einem Text (Font: Arial, Fett, 72)
procedure BeispielBitmapErstellen(Bmp: TBitmap);
var
MyText:
String;
begin
MyText := '
Delphi Regio';
//Bitmap Teil (eine Beispiel-Bitmap mit einem Text wird erstellt)
Bmp.Canvas.Font.
Name := '
Arial';
Bmp.Canvas.Font.Size := 72;
Bmp.Canvas.Font.Style := Bmp.Canvas.Font.Style + [fsBold];
Bmp.Height := Bmp.Canvas.TextHeight(MyText);
Bmp.Width := Bmp.Canvas.TextWidth(MyText);
Bmp.Canvas.TextOut(0, 0, MyText);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Wieder freigeben
DeleteObject(RGN);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
begin
Button1.Enabled := False;
Color := clRed;
Bmp := TBitmap.Create;
try
//Bitmap erstellen
BeispielBitmapErstellen(Bmp);
//Größe des Formulars an Bitmap anpassen
ClientHeight := Bmp.Height;
ClientWidth := Bmp.Width;
//Region erstellen
RGN := CreateRGN(Bmp, Bmp.Canvas.Pixels[0, 0]);
//Zeichenbereich eines Fensters setzen
SetWindowRGN(
Handle, RGN, True);
finally
Bmp.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close
end;