Форум: "WinAPI";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];
ВнизВопросик мона? Найти похожие ветки
← →
mindguru (2002-02-02 08:50) [0]Как нарисовать и таскать по экрану прозрачное окошко в 98/95? Заранее всем спасибо.
← →
Pat (2002-02-02 10:02) [1]http://delphi.vitpc.com/treasury/samples.htm
Это нарисовать...а таскать там есть небольшие проблемы с перерисовкой окна...Может оптимизируешь..
← →
AlexRush (2002-02-02 18:47) [2]В объявление класса формы нужно добавить следующую функцию:
protected
procedure CreateParams(var Params : TCreateParams); override;
Нажимаем Ctrl+C (сгенерить реализацию метода)
... и реазуем:
procedure TForm1.CreateParams(var Params : TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:=Params.ExStyle or WS_EX_TRANSPARENT;
//форма становится прозрачной
end;
Работает во всех версиях Windы.
TODO: Посмотри описание апишных CreateWindow и CreateWindowEx
Для создания нестандартных форм окна смотри/используй
CreateEllipticRgn, CreatePolygonRgn и еже с ними.
Понадобятся примеры - пиши.
← →
copyr25 (2002-02-04 18:45) [3]...
private
{ Private declarations }
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;
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);
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);
end;
SetWindowRgn(Handle, FullRgn, True);
end;
← →
copyr25 (2002-02-04 18:47) [4]unit Unit1;
// another method to create transparent form
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
frmRegion, tempRegion: HRGN;
i: Integer;
Arect: TRect;
begin
frmRegion := 0;
for I := 0 to ControlCount - 1
do begin
{ create a region for the control }
aRect := Controls[i].BoundsRect;
{ coordinates have to be window-relative, not client area relative }
OffsetRect( aRect, clientorigin.x - left, clientorigin.y - top );
tempRegion := CreateRectRgnIndirect( aRect );
{ merge the region with the "summary" region we are building }
if frmRegion = 0 then frmRegion := tempRegion
else begin
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
end;
end;
{ create a region for the caption and menu bar and add it to the summary }
tempregion := CreateRectRgn( 0, 0, Width, GetSystemMetrics( SM_CYCAPTION )+
GetSystemMetrics( SM_CYSIZEFRAME ) +
GetSystemMetrics( SM_CYMENU ) * Ord(Menu <> Nil));
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
SetWindowRgn( handle, frmRegion, true );
end;
end.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c