Loading... unit Unit1; <br /><br />interface <br /><br />uses <br /> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, <br /> ExtCtrls, StdCtrls, Buttons; <br /><br />type <br /> TForm1 = class(TForm) <br /> Image1: TImage; <br /> Button1: TButton; <br /> procedure FormCreate(Sender: TObject); <br /> procedure Button1Click(Sender: TObject); <br /> procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; <br /> Shift: TShiftState; X, Y: Integer); <br /> private <br /> function CreateRegion(wMask: TBitmap; wColor: TColor;hControl: THandle): HRGN; <br /> { Private declarations } <br /> public <br /> { Public declarations } <br />end; <br /><br />var <br /> Form1: TForm1; <br /><br />implementation <br /><br />{$R *.DFM} <br /><br />function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle): HRGN; <br />var <br /> dc, dc_c: HDC; <br /> rgn: HRGN; <br /> x, y: integer; <br /> coord: TPoint; <br /> line: boolean; <br /> color: TColor; <br />begin <br /> dc := GetWindowDC(hControl); <br /> dc_c := CreateCompatibleDC(dc); <br /> SelectObject(dc_c, wMask.Handle); <br /> BeginPath(dc); <br /> for x:=0 to wMask.Width-1 do <br /> begin <br /> line := false; <br /> for y:=0 to wMask.Height-1 do <br /> begin <br /> color := GetPixel(dc_c, x, y); <br /> if not (color = wColor) then <br /> begin <br /> if not line then <br /> begin <br /> line := true; <br /> coord.x := x; <br /> coord.y := y; <br /> end; <br /> end; <br /> if (color = wColor) or (y=wMask.Height-1) then <br /> begin <br /> if line then <br /> begin <br /> line := false; <br /> MoveToEx(dc, coord.x, coord.y, nil); <br /> LineTo(dc, coord.x, y); <br /> LineTo(dc, coord.x + 1, y); <br /> LineTo(dc, coord.x + 1, coord.y); <br /> CloseFigure(dc); <br /> end; <br /> end; <br /> end; <br /> end;<br /> EndPath(dc); <br /> rgn := PathToRegion(dc); <br /> ReleaseDC(hControl, dc); <br /> Result := rgn; <br />end; <br /><br />procedure TForm1.FormCreate(Sender: TObject); <br />var <br /> w1:TBitmap; <br /> w2:TColor; <br /> rgn: HRGN; <br />begin <br /> w1:=TBitmap.Create; <br /> w1.Assign(image1.Picture.Bitmap); <br /> w2:=w1.Canvas.Pixels[0,0]; <br /> rgn := CreateRegion(w1,w2,Handle); <br /> if rgn<>0 then <br /> begin <br /> SetWindowRgn(Handle, rgn, true); <br /> end; <br /> w1.Free; <br />end; <br /><br />procedure TForm1.Button1Click(Sender: TObject); <br />begin <br /> Close; <br />end; <br /><br />procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; <br />Shift: TShiftState; X, Y: Integer); <br />begin <br /> ReleaseCapture; <br /> SendMessage(Handle, WM_SYSCOMMAND, $F012, 0); <br />end; <br /><br />end. <br /><br />文章作者:mantousoft<br />文章来源:2ccc.com<br />作者邮箱:root@2ccc.com 相关文章 无相关文章 Last modification:August 16th, 2009 at 12:30 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat