Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как сделать форму невидимой, а компоненты (image) видимые…

Delphi , Компоненты и Классы , TImage и TImageList

Как сделать форму невидимой, а компоненты (image) видимые…

Автор : Нуржанов Аскар. (NikNet/Arazel)

Сайт кому интересно : NikNet.narod.ru

04.12.2006.

Данный пример показывает, как сделать форму невидимой, а компоненты (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.

Код написан на языке Delphi и используется для скрытия формы, оставляя ее компоненты (изображения) видимыми.

В процедуре FormCreate стиль рамки устанавливается в bsNone, а горизонтальные и вертикальные полосы прокрутки делаются невидимыми.

В процедуре ImagesWindowRgn создается два региона: один для всей формы (FullRgn) и другой для клиентской области формы (Rgn). Затем эти два региона комбинируются с помощью функции CombineRgn с флагом RGN_DIFF, чтобы создать регион, исключающий клиентскую область. Это означает, что любая область вне клиентской области не будет видима.

Затем проходит через все контролы на форме и проверяет каждый контроль, является ли он изображением. Если это так, то создается еще один регион (temprgn) для каждого непрозрачного пикселя в изображении и комбинируется с FullRgn с помощью функции CombineRgn с флагом RGN_OR. Это означает, что любые непрозрачные пиксели будут видимы.

Наконец, устанавливается регион окна формы в FullRgn с помощью функции SetWindowRgn.

Результат - форма сама по себе невидима, но ее компоненты (изображения) все еще видимы и могут быть взаимодействованы как обычно.

Как сделать форму невидимой, а компоненты (image) видимые, используя Delphi и обработку региона окна (window region).


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TImage и TImageList ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:25:01/0.0032050609588623/0