2005. szeptember 9., péntek

Create a transparent form which is still moveable


Problem/Question/Abstract:

How to create a transparent form which is still moveable

Answer:

You can achieve a transparency effect by creating a window region that includes only the controls on the form but not the background. Making a window transparent and still moveable:

procedure TForm1.Button2Click(Sender: TObject);
var
  frmRegion, tempRegion: HRGN;
  i: Integer;
  Arect: TRect;
begin
  frmRegion := 0;
  for I := 0 to ControlCount - 1 do
  begin
    { create a region for the control }
    aRect := Controls[i].BoundsRect;
    { coordinates have to be window-relative, not client area relative }
    OffsetRect(aRect, clientorigin.x - left, clientorigin.y - top);
    tempRegion := CreateRectRgnIndirect(aRect);
    { merge the region with the "summary" region we are building }
    if frmRegion = 0 then
      frmRegion := tempRegion
    else
    begin
      CombineRgn(frmRegion, frmRegion, tempRegion, RGN_OR);
      DeleteObject(tempRegion);
    end;
  end;
  { create a region for the caption and menu bar and add it to the summary }
  tempregion := CreateRectRgn(0, 0, Width, GetSystemMetrics(SM_CYCAPTION) +
    GetSystemMetrics(SM_CYSIZEFRAME) +
    GetSystemMetrics(SM_CYMENU) * Ord(Menu < > nil));
  CombineRgn(frmRegion, frmRegion, tempRegion, RGN_OR);
  DeleteObject(tempRegion);
  SetWindowRgn(handle, frmRegion, true);
end;

Nincsenek megjegyzések:

Megjegyzés küldése