How to change the shape of your forms?

Answer Posted / editcdc

Found this write-up online:

n general terms, the algorithm goes like this:

1.

We adjust the form to the dimensions of the BMP file.
This is simple. For the purpose, the following two lines
will do it:

// Ajustar el área / to Ajust the area
ClientWidth := Image1.Width;
ClientHeight:= Image1.Height;

2.

We read the first pixel of the form and take it as
"transparent".
3.

We search for the first "non-transparent" pixel and
from this point we generate a polygon with the silhouette of
the "non-transparent" part (see GenRegion in the file
ffigura.pas).
4.

We get rid of the title bar (if it's still bothering
us). To do it:

BorderStyle := bsNone; // Titulo estorba / no Title

5.

We change the shape of the form according to the
polygon. To do it we make use of the CreatePolygonRgn and
SetWindowRgn API functions (see ActiveSkin in ffigura.pas).
Unlike the example of the first part of this article, in
this one we don't define an elliptical (circular) region.
6.

We set from the TImage the necessary events for
dragging the form like we did in the example of the first
article.

Except for the third step, nothing seems too difficult. To
generate the polygonal region we just look for the frontier
of the figure, then we advance thru all the outline of the
figure until we reach the starting point (or run out of
memory, in this case 1024 points). This series of points
define a polygon used to generate a region with the function
CreatePolygonRgn. Then we use SetWindowRgn y we get the form
with the given shape. It works but it has limitations: our
figure must have only one frontier, therefore it can't be a
figure with a hole in the middle (in any case the algorithm
will ignore the hole in the middle).

Is This Answer Correct ?    0 Yes 0 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

How to generate steps to reproduce your issue for Borland Developer Support?

1244


What are IDAPI and SQL links ?

1306


What is the message "Generating font matrix" when starting Kylix?

1517


Where is TReport in Delphi 6?

1456


How to Use the LzExpand functions in your applications?

1286






How to Clear the window in a console application?

1268


'Invalid BLOb handle' error . what does this indicates?

1236


'Interface mismatch. Engine version different' . what does this error indicates?

2073


How to Use additional data sets in expressions ?

1282


How to test if a given string contains a valid number?

1183


How does inheritance operate when using the object of the classes?

448


How to make the background color different for alternating lines of text in a TListBox in Delphi?

1317


How to Create a custom TInplaceEdit for TDBGrid ?

1990


compare TProvider Component vs. Provider Property ?

1205


How to convert Integer to 'Binary String'?

1385