Автор : Нуржанов Аскар. (NikNet/Arazel)
Данный пример показывает, как сделать форму невидимой, а компоненты (image) видимые…
И ещё, если компонент имеет Transparent = false, то процедура не вырезает те части
которые должны быть вырезанные. Одни, словом как вы видите её визуально так и
увидите в Runtime.
Code: |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;
type TForm1 = class(TForm) Image3: TImage; Image2: TImage; Image1: TImage; procedure FormCreate(Sender: TObject); protected procedure ImagesWindowRgn; public end;
var Form1: TForm1;
implementation
uses Types;
{$R *.dfm}
procedure TForm1.ImagesWindowRgn; var FullRgn, Rgn: THandle; ClientX, ClientY, i , k: integer;
x, y, firstx, cl : integer; last : boolean; temprgn : hrgn; Begin k:=0; ClientX := (Width - ClientWidth) div 2; ClientY := Height - ClientHeight - ClientX; FullRgn:=CreateRectRgn(0,0,Width,Height); Rgn:=CreateRectRgn(ClientX,ClientY,ClientX+ClientWidth,ClientY+ClientHeight); CombineRgn(FullRgn,FullRgn,Rgn,RGN_DIFF);
for i:=0 to ControlCount-1 do with Controls[i] do begin // Rgn:=CreateRectRgn(ClientX+Left,ClientY+Top,ClientX+Left+Width,ClientY+Top+Height); // CombineRgn(FullRgn,FullRgn,Rgn,RGN_OR); //*************************************************************************************** if (TImage(Controls[i]).Picture) <> nil then with TImage(Controls[i]) do Begin if Transparent then cl := Picture.Bitmap.Canvas.Pixels [0, 0]; for y:=0 to Picture.Bitmap.height-1 do begin firstx:=0; last:=false; for x:=0 to Picture.Bitmap.width-1 do if(abs( Picture.Bitmap.canvas.pixels[x,y] - cl)>0) and (x<>pred( Picture.Bitmap.width)) then begin if not last then begin last:=true; if Transparent then firstx:=x; end; end else if last then begin last:=false; temprgn:=CreateRectRgn( firstx+left, y+Top, left+x, Top+y+1); // temprgn:=createrectrgn(firstx,y,x,y+1); CombineRgn(FullRgn,FullRgn,temprgn,RGN_or); deleteobject(temprgn); end; end; end; //*************************************************************************************** end; SetWindowRgn(Handle,FullRgn,true); end;
procedure TForm1.FormCreate(Sender: TObject); begin HorzScrollbar.Visible := false; VertScrollbar.Visible := false; BorderStyle:=bsNone; ImagesWindowRgn; end;
end. |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!