Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Прозрачная форма, не реагирующая на мышь

Delphi , Программа и Интерфейс , Формы

Прозрачная форма, не реагирующая на мышь

Code:
unit transpar_frm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   CheckBox1: TCheckBox;
   // это просто кнопки на форме - для демонстрации
protected
   procedure RebuildWindowRgn;
   procedure Resize; override;
public
   constructor Create(AOwner: TComponent); override;
end;
var
Form1 : TForm1;
implementation
 
{$R *.DFM}
{ Прозрачная форма }
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
// StayOnTop в принципе можно убрать
FormStyle:=fsStayOnTop;
// убираем скроллбары, чтобы не мешались
// при изменении размеров формы
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.Resize;
begin
inherited;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
// определяем относительные координаты клиенской части
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn:= CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
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);
   end;
// устанавливаем новый регион окна
SetWindowRgn(Handle, FullRgn, True);
end;
end.
Автор: Krid
Взято из http://forum.sources.ru
Code:
type
TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
protected
   procedure CreateParams (var Params: TCreateParams); override;
end;
 
var
Form1: TForm1;
 
implementation
 
...
 
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, Byte(196), 2);
end;
 
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams (Params);
Params.ExStyle := Params.ExStyle or
   WS_EX_TRANSPARENT;
end;
Автор:  Smike
Взято из http://forum.sources.ru
Вместо перекрытия CreateParams():
Сделать "прозрачным" для мышки:
Code:
setWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT);
Сделать обратно нормальным:
Code:
setWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) and not WS_EX_TRANSPARENT);
Автор:  Vitalik
Взято из http://forum.sources.ru
Еще одно хорошее решение. Его преимущество в том, что работать оно будет на всех системах, включая Win9x.
 
Code:
procedure TForm1.HandleMessage(var Msg: tagMSG;var Handled: Boolean);
Var
P:TPoint;
S,R:HRGN;
begin
Inherited;
Case Msg.message Of
   WM_MOUSEFIRST..WM_MOUSELAST:
   Begin
     P.X:=ScreenToClient(Msg.pt).X+ClientOrigin.X-Left;
     P.Y:=ScreenToClient(Msg.pt).Y+ClientOrigin.Y-Top;
     R:=CreateRectRgn(P.X,P.Y,P.X+1,P.Y+1);
     S:=CreateRectRgn(0,0,Width,Height);
     CombineRgn(S,S,R,RGN_XOR);
     SetWindowRgn(Handle,S,True);
     SendMessage(WindowFromPoint(Msg.pt),Msg.message,Msg.wParam,Msg.lParam);
     DeleteObject(R);
     DeleteObject(S);
     Handled:=True;
   End;
End;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=HandleMessage;
end;
Автор ответа - Scorpy
Взято из http://forum.sources.ru

Статья Прозрачная форма, не реагирующая на мышь раздела Программа и Интерфейс Формы может быть полезна для разработчиков на Delphi и FreePascal.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: Формы ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
20.04.2024 03:46:29/0.036735057830811/2