Create a bitmap-like irregular form (transparent, movable)

xiaoxiao2021-03-06  20

// Code from the Internet

Control: TIMAGE

This function is used to create an irregular form.

/ / -------------------------------------------------------------------------------------------- --------------------------- void __fastcall tform1 :: bmptorgn () {image1-> autosize = true; form1-> autosize = true; Form1-> borderstyle = bsnone; // Remove Tcolor colorKey = Image1-> canvas-> Pixels [0] [0]; // with this point of color Int x, y; int L , R; Point * a; BOOL LB, RB; HRGN WNDRGN, TEMPRGN; IF ((a = (Point *) Malloc (width * 2 * (SizeOf (POINT))) == null) {showMessage ("Apply for memory Failure! "); Exit (0);} l = 0; r = image1-> height * 2-1; wNDRGN = CreateRectrGN (0, 0, image1-> width, image1-> height); for (y = 0 Y height; y ) {lb = true; for (x = 0; x width 1; x ) if (image1-> canvas-> pixels [x] [y]! = ColorKey ) {A [l] .x = x; a [l] .y = y; lb = false; break;} if (lb) a [l] = a [l-1]; L ; RB = true; for (x = image1-> width; x> = 0; x--) IF (image1-> canvas-> pixels [x] [y]! = colorKey) {a [r] .x = x; a [r] .y = y; rb = false; Break;} if (rb) a [r] = a [R 1]; r -;} r = image1-> height * 2-1; for (y = 0; Y HEIGHT-1; Y ) {for (x = a [y] .x; x <= a [r] .x; x ) if (image1-> canvas-> pixels [x] [y] == ColorKey) {tempRGN = CreateRectrGN (x, y, x 1, y 1); Combinergn (WNDRGN, WNDRGN, TEMPRGN, RGN_XOR); deleteObject (Temprgn);} r -;} // Temprgn = CreatePolygonRgn (a, Image1-> Height * 2, Alternate; Temprgn = CreatePolygonRGN (A, Image1-> Height * 2, WINDING); Combinergn (WNDRGN, WNDRGN, TEMPRGN, RGN_AND); DeleteObject (Temprgn); delete A;

转载请注明原文地址:https://www.9cbs.com/read-43711.html

New Post(0)