关于不规则窗体,透明窗体的实现!(100分)

I

indo99

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]众位大哥,小弟目前做一个软件,要求用到不规则窗体,
就是沿一张图片的边框实现不规则窗体,而且窗体可以随鼠标按住不放而被拖动,
和有蓝条边框的拖动效果一样。不知道在delphi中如何实现,
如果有控件,可以不可以给个地址让小弟下载?
还请各位不吝赐教!多谢![/red]
 
Y

yanyandt2

Unregistered / Unconfirmed
GUEST, unregistred user!
你在 google 中搜索
“delphi 不规则窗体”,会找到许多答案的
 

康凌

Unregistered / Unconfirmed
GUEST, unregistred user!
abc等控件可以!网上有很多这类控件!
www.playicq.com
 
H

haofang

Unregistered / Unconfirmed
GUEST, unregistred user!
不用麻烦,d6非常容易就可以实现,
form上加一image,image加图片,
form和image的transparent设为true;
form的style设为none。transparentcolor设为与form颜色一样,
对图片进行加工,透明处与form色一样。
run,ok
 
Z

zw84611

Unregistered / Unconfirmed
GUEST, unregistred user!
http://islet8.51.net/html/codes/download/rgnform_sc.rar
 
H

haofang

Unregistered / Unconfirmed
GUEST, unregistred user!
对了,还有移动。
var mpos:tpoint;
onmousedown事件:mpos.x:=x;mpos.y:=y;
onmousemove事件:form1.left:=form1.left+x-mpos.x;
form1.top:=form1.top+y-mpos.y;
这种方法没有form的边框。
 
S

snrmtd

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tfrm_chart.setmywin;
var
temprgn:hrgn;
bmp:TBitmap ;
x,y,x1,x2:integer;
mycolor:tcolor;
begin
bmp:=TBitmap.Create;
bmp.Width:=Chart1.Width;///你只需改这里
bmp.Height:=Chart1.Height;///你只需改这里
Chart1.PaintTo(bmp.Canvas,1,1);///你只需改这里例如 bmp.loadfromfile('f:/gg.bmp');
myrgn:=CreateRectRgn(0,0,0,0);
mycolor:=bmp.Canvas.Pixels[1,1];
for y:=1 to bmp.Heightdo
begin
x1:=-1;
x2:=-1;
for x:=1 to bmp.Widthdo
begin
if bmp.Canvas.Pixels[x,y]<>mycolor then
begin
x2:=x;
if x1<0 then
x1:=x;
end
else
begin
if (x1>0) and (x1<=x2) then
begin
temprgn:=CreateRectRgn(x1-1,y-1,x2,y);
CombineRgn(
myRgn , // handle to destination region
myRgn , // handle to source region
temprgn , // handle to source region
RGN_OR // region combining mode
);
DeleteObject(temprgn);
x1:=-1;
x2:=-1;
end;
end;
end;

end;
SetWindowRgn(
handle ,
myRgn,
true
);
bmp.Free;
end;
 
W

wuan

Unregistered / Unconfirmed
GUEST, unregistred user!
不规则窗口可以用setwindowrgn() 实现,至于拖动可调用releasecaptor() api实现.
 
Y

yanyandt2

Unregistered / Unconfirmed
GUEST, unregistred user!
haofang的招数不错,收藏了
 
Y

yanyandt2

Unregistered / Unconfirmed
GUEST, unregistred user!
强烈支持 haofang 招数,简单,有效,不用循环语句,节省资源
佩服
 
I

indo99

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
H

haofang

Unregistered / Unconfirmed
GUEST, unregistred user!
把http://islet8.51.net/html/codes/download/rgnform_sc.rar改了一下。
implementation
{$R *.DFM}
var mpos:tpoint;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Image1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
mpos.X:=x;
mpos.Y:=y;
end;

procedure TForm1.Image1DblClick(Sender: TObject);
begin
close;
end;

procedure TForm1.Image1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
begin
if ssleft in shift then
begin
form1.Left:=form1.Left+x-mpos.x;
form1.Top:=form1.Top+y-mpos.y;
end;
end;

end.

窗体:
object Form1: TForm1
AutoSize = True
BorderStyle = bsNone
Caption = '不规则FORM演示'
ClientHeight = 112
ClientWidth = 131
Color = clBlue
TransparentColor = True
TransparentColorValue = clBlue
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsStayOnTop
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 0
Top = 0
Width = 131
Height = 112
Picture.Data = 略
Stretch = True
OnDblClick = Image1DblClick
OnMouseDown = Image1MouseDown
OnMouseMove = Image1MouseMove
end
object Button1: TButton
Left = 56
Top = 88
Width = 41
Height = 17
Caption = 'Close'
Default = True
TabOrder = 0
OnClick = Button1Click
end
end

 
顶部