一个FORM,用右键弹出选项,选择一个以后窗体变透明,最好是可以选择透明程度的~~HOHO,多谢啦~~
解决方案 »
- 4年都没有使用delphi了,现在要改进的是6年前的程序,哪位朋友现在还有……
- 有一段VC++代码,想转化为Delphi下使用,对这两种语法都熟悉的北京地区高手给我联系吧!
- OLE的问题:如何在Delphi里面得到Word文档的页数以及选择指定的页
- dbgrid的问题,急!!!
- 请问如何比较 时间的大小,问题解决马上给分
- Delphi程序右键
- 那位前辈朋友用过codesite,请和我联系.,研究这个东西的用法,谢谢
- 怎么让一个非激活的窗体不被激活?
- ADO连接Access2000的麻烦事!请帮助!
- INTERBASE有什么用途,怎么使用?
- 求救!Delphi中TCheckListBox达到ReadOnly的效果怎么做?
- 100分:谁能将c++的结构体转为delphi的?
[email protected]
3Q~~
procedure TForm1.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:=Params.ExStyle or WS_EX_TRANSPARENT;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
Canvas.Brush.Style:=bsClear;
end;
试一下,你 可以加在按钮中。
setlayer...后面的忘了,查一下最新的api帮助
用AlphaBlendValue:=255;是窗体透明
用AlphaBlendValue:=255;是窗体透明
只在WIN2000,XP系统中可用!
var
FullRgn, ClientRgn, ButtonRgn: THandle;
Margin, X, Y: Integer;
begin
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
X := X + Button1.Left;
Y := Y + Button1.Top;
ButtonRgn := CreateRectRgn(X, Y, X + Button1.Width, Y + Button1.Height);
CombineRgn(FullRgn, FullRgn, ButtonRgn, RGN_OR);
SetWindowRgn(Handle, FullRgn, True);
end;
用AlphaBlendValue:=255;是窗体透明
98下可以这么使用
也可以参考
http://www2.ccw.com.cn/tips/2k07/070602_05.asp
添加Image1 设置 align 为 alClient
procedure TForm1.FormShow(Sender: TObject);
var
ScreenDc,DestDc:Hdc;
BHandle:THandle;
X,Y:integer;
Color:TColor;
Color1,Color2,Color3:Byte;
FormRgn:Hrgn;
begin
FormRgn:=CreateRoundRectRgn(0,0,Width,Height,15,15);
SetWindowRgn(Handle,FormRgn,True);
ScreenDc:=CreateDc('DISPLAY',nil,nil,nil);
DestDc:=CreateCompatibleDc(ScreenDc);
BHandle:=CReateCompatibleBitmap(ScreenDc,Width,Height);
SelectObject(DestDc,Bhandle);
BitBlt(DestDc,0,0,Width,Height,ScreenDc,(Width)div 2,(Height)div 2,SRCCOPY);
for x:=0 to Width-1 do begin
for y:=0 to Height-1 do begin
Color:=GetPixel(DestDc,x,y);
Color1:=GetRValue(Color) div 3;
Color2:=GetGValue(Color) div 3;
Color3:=GetBValue(Color) div 3;
Color:=RGB(Color1,Color2,Color3);
SetPixel(DestDC,x,y,Color);
end;
end;
BitBlt(Image1.Canvas.Handle,0,0,Width,Height,DestDC ,0,0,SRCCOPY);
DeleteDc (DestDc);
ReleaseDc (Bhandle,ScreenDc);
with Image1.Canvas do begin
Moveto(0,0);
Pen.Color :=rgb(192,192,192);
Lineto(Image1.Width -1,0);
Lineto(Image1.Width -1,Image1.Height -1);
Lineto(0,Image1.Height-1);
Pen.Color :=rgb(192,192,192);
Lineto(0,0);
end;
end;2K,XP下 直接调用Form单元中的 AlphaBlendValue 速度慢 我这里是很慢很慢AlphaBlend:=true;你尝试一下速度!
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
AlphaBlendValue:=TrackBar1.Position;
end;如果直接调用速度快方法如下
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;var
Form1: TForm1;implementation{$R *.DFM}
const
WS_EX_LAYERED = $80000;
LWA_ALPHA = $2;procedure TForm1.FormCreate(Sender: TObject);
var
l:longint;
begin
l:=getWindowLong(Handle, GWL_EXSTYLE);
l := l Or WS_EX_LAYERED;
SetWindowLong (handle, GWL_EXSTYLE, l);
TrackBar1.Position:=255;
SetLayeredWindowAttributes(handle, 0, 255, LWA_ALPHA);
end;procedure TForm1.TrackBar1Change(Sender: TObject);
begin
SetLayeredWindowAttributes(handle, 0, TrackBar1.Position, LWA_ALPHA);
end;