Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
Var WindowRgn:HRGN;
Begin
BorderStyle:=bsNone;
ClientWidth:=Image1.Picture.Bitmap.Width;
ClientHeight:=Image1.Picture.Bitmap.Height;
windowRgn:=CreateRgnFromBitmap(Image1.Picture.Bitmap);
SetWindowRgn(Handle,WindowRgn,True);
end;
Нужно еще создать функцию:
Код: Выделить всё
Function CreateRgnFromBitmap(rgnBitmap:TBitMap):HRGN;
Var TransColor : TColor;
I,J :Integer;
I_width, i_height : Integer;
i_left, i_right : Integer;
rectRgn : HRGN;
Begin
Result:=0;
// Çàïîìèíàåì ðàçìåðû îêíà
i_width:=rgnBitmap.Width; i_height:=rgnBitmap.Height;
// Îïðåäåëÿåì ïðîçðà÷íûé öâåò
transColor:=rgnBitmap.Canvas.Pixels[0,0];
// Öèêë ïåðåáîðà ñòðîê êàðòèíêè äëÿ îïðåäåëåíèÿ îáëàñòè îêíà áåç ôîíà
for i:=0 to i_height-1 do
Begin
i_left:=-1;
// Öèêë ïåðåáîðà ñòîëáöîâ êàðòèíêè
for j:=0 to i_width-1 do
begin
if i_left<0 then
Begin
if rgnBitmap.Canvas.Pixels[j,i]<>transColor Then i_left:=j;
end else
if rgnBitmap.Canvas.Pixels[j,i]=transColor then
begin
i_right:=j;
rectRgn:=createRectRgn(i_left,i,i_right,i+1);
if result=0 then result:=rectRgn
else begin
CombineRgn(Result,Result,rectRgn, RGN_OR);
DeleteObject(rectRgn);
end;
i_left:=-1;
end;
end;
if i_left>=0 then
begin
rectRgn:=CreateRectRgn(i_left,i,i_width,i+1);
if Result=0 then result:=rectrgn
Else begin
CombineRgn(Result,Result,rectRgn,RGN_OR);
DeleteObject(RectRgn);
end;
end;
end;
End;
Теперь у меня вопрос, как можно перетаскивать форму не за заголовок???