function BitmapToRegion(Bitmap:TBitmap; TransColor:TColor): HRGN; //TransColor - цвет, декларированный как прозрачный
var x, y: Integer;
xStart: Integer;
begin
Result:=0;
with Bitmap do begin
for y:=0 to Height-1 do begin
x:=0;
while x<Width do begin
while (x<Width) and (Canvas.Pixels[x, y]=TransColor) do
inc(x);
if x>=Width then Break;
xStart:=x;
while (x<Width) and (Canvas.Pixels[x, y]<>TransColor) do
inc(x);
if Result=0 then
Result:=CreateRectRgn(xStart, y, x, y + 1)
else
CombineRgn(Result, Result, CreateRectRgn(xStart, y, x, y + 1), RGN_OR);
end;
end;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
if bmp<>nil then
Canvas.Draw(0, 0, bmp);
end;
procedure TForm1.HitTest;
begin
inherited;
if MSG.Result = htClient then
MSG.Result := htCaption;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if bmp=nil then begin
bmp:=TBitmap.Create;
bmp.LoadFromResourceName(HInstance, 'LOGO');
end;
BorderStyle:=bsNone;
SetWindowRgn(Handle, BitmapToRegion(bmp, RGB(255, 255, 255)), true);
SetBounds((Screen.Width-bmp.Width) div 2, (Screen.Height-bmp.Height)div 2, bmp.Width, bmp.Height);
Refresh;
end;
круглая кнопка
:( Пожалуйста помогите создать круглий или овалный кнопка (button). спосибо заранее!!!
попадение в область можно, например, вычислить взяв центр кнопки и коррдинату нажати,я если расстояние меньше радиуса, то всё нормально
а ты по форуму искал? подобные темы не раз поднимались, попробуй http://forum.codenet.ru/search.php
Спосибо за ответ! я пробовал все ок... но я хотел в с# юзер контрол. с круглым буттоном. а так нормально.....
Привожу свой старый паскалевский код, который делает форму в виде произвольной картинки. Под свои нужды его переделать будет не сложно.
Код: