【怎样才能使透明窗体具有Resize功能?】(100分)

  • 主题发起人 主题发起人 siteboy
  • 开始时间 开始时间
S

siteboy

Unregistered / Unconfirmed
GUEST, unregistred user!
我是通过 form1.TransparentColor:=true;
把窗体设成透明的。
当把窗体 BorderStyle 设成 bsNone 时,发现窗口标题是没有了,
但是窗口也就不能Resize了。有没有办法让它具有拉动功能呢?
我主要是想在视频窗口上实现的,是要在使用背景图框时,也想让它有Resize功能。

恳请高手相助,谢谢!!!!
 
你用的delphi几啊?你看这样行不行?
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
private
procedure WmNCHitTest(var Msg : TWMNCHitTest);
message WM_NCHITTEST;

{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest);
const v=10;
//border width
var p:TPoint;
begin

p:=Point(Msg.XPos,Msg.YPos);
p:=ScreenToClient(p);
if PtInRect(Rect(0,0,v,v),p) then

Msg.Result:=HTTOPLEFT
else
if PtInRect(Rect(Width-v,Height-v,Width,Height),p) then

Msg.Result:=HTBOTTOMRIGHT
else
if PtInRect(Rect(Width-v,0,Width,v),p) then

Msg.Result:=HTTOPRIGHT
else
if PtInRect(Rect(0,Height-v,v,Height),p) then

Msg.Result:=HTBOTTOMLEFT
else
if PtInRect(Rect(v,0,Width-v,v),p) then

Msg.Result:=HTTOP
else
if PtInRect(Rect(0,v,v,Height-v),p) then

Msg.Result:=HTLEFT
else
if PtInRect(Rect(Width-v,v,Width,Height-v),p) then

Msg.Result:=HTRIGHT
else
if PtInRect(Rect(v,Height-v,Width-v,Height),p) then

Msg.Result:=HTBOTTOM;
Inherited;
end;


end.



 
to bubble: 我用的是delphi7,你的代码我全复制了,不行的。
 
就是改变无标题窗体的大小嘛,简单:(千万不要将borderstyle设置为:bsnone.由api完成)
......
type
tform1=class(tform);
.....
//加入这两行
procedure createparams(var Params: Tcreateparams);override;
procedure WMNCHittest(var: msg:TWMNCHitTest);message WM_NCHITTEST;
...
//在最后写入
procedure createparams(var Params: Tcreateparams);
begin

inherited;
with paramsdo

style:=(style or WS_POPUP) and (not WS_DLGFRAME);
end;

procedure WMNCHittest(var: mag:TWMNCHitTest);
begin

inherited;
if (msg.result=htClient) then

msg.result:=htCaption;
end;

end.

 
为什么不能将borderstyle设置为:bsnone.,而非得由api完成?
 
嘿嘿,我的方法才是最简单的![:D]
先设置BorderStyle = bsNone,然后加入下面几行代码,就可以啦
......
public
procedure CreateParams(var Params: TCreateParams);
override;

......
procedure TForm1.CreateParams(var Params: TCreateParams);

begin

inherited CreateParams(Params);

Params.Style := (Params.Style or WS_THICKFRAME);

end;
 
因为已又api完成了,多此一举.这个方法实际上是对窗体样式的重载.
 
都比我的方法简单,我也就不贴了。
 
后退
顶部