Автор: Krid
Code: |
type {©Drkb v.3: www.drkb.ru} 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
Вместо перекрытия 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
Еще одно хорошее решение. Его преимущество в том, что работать оно будет на всех системах, включая 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
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!