Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent Click-thru on transparent form

I want to plot a function in a form without the forms background being visible. Created a TForm with TransparentColor set to True and TransParentColorValue set to clWhite. Just put a TImage on it, draw a function on a bitmap, assign it to the image, works great. There is one problem. I cannot click the form anymore. Any click on the form's caption and clientarea lead to a click in the underlying application. This is caused by setting TransparentColor to True. How can I prevent this "clicking-thru"?

Update I tried Sertac's suggestions and I got some remarkable results. I prepare the bitmap as follows:

   Bitmap.Canvas.Brush.Color := clFuchsia;
   Bitmap.Canvas.FillRect (Rect (0, 0, Bitmap.Width, Bitmap.Height));

When Color is set to clWhite and the Forms TransparentColorValue as well, the form is completely click-thru enabled.

Both set to clBlack, the form can be moved, but borders can't be resized and system buttons don't work

Both set to clFuchsia it behaves as a normal Form. Well, it works now but maybe someone got an explanation?

like image 960
Arnold Avatar asked Nov 30 '25 16:11

Arnold


1 Answers

It would seem the API acts weird when some specific colors is used. White is an obvious one, black is a little less problematic. I've tried with yellow, gray, button face, fuchsia etc.. and they look fine.

If anyone wants to duplicate the problem without using Delphi's 'Transparent...' properties, here's a little snippet:

procedure TForm1.Button1Click(Sender: TObject);
var
  Color: DWORD;
  DC: HDC;
begin
  Color := $00FFFFFF;
  SetWindowLong(Handle, GWL_EXSTYLE,
      GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED );
  SetLayeredWindowAttributes(Handle, Color, 255, LWA_COLORKEY);

  DC := GetWindowDC(Handle);
  SetDCBrushColor(DC, Color);
  FillRect(DC, Rect(10, 10, 100, 80), GetStockObject(DC_BRUSH));
  ReleaseDC(Handle, DC);
end;


Note: I'd gladly remove this answer if anyone provides an answer with a definitive explanation.

like image 80
Sertac Akyuz Avatar answered Dec 02 '25 07:12

Sertac Akyuz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!