请问各位怎么样将一个窗体透明化(50分)

  • 主题发起人 主题发起人 maoyijing
  • 开始时间 开始时间
M

maoyijing

Unregistered / Unconfirmed
GUEST, unregistred user!
问题同上
 
Delphi6 里面的窗体的属性中可以设置.
跟两个属性有关,好象是FormAlfa和FormAlfaValue,你找一找。
如果D5,则需要使用一个API,而且只能在Windows2000以上使用。你可以到Hubdog
的葵花宝典中找一找。
 
Delphi 5中;
Brush.Style:=bsClear;
 
大哥,检索一下以前的问题,
 
全透明用
Brush.Style:=bsClear;
挖空用
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd:integer;
region1,region2:hrgn;
a:trect;
begin
hwnd:=getactivewindow;
getwindowrect(hwnd,a);
region1:=createrectrgn(0,0,a.Right-a.Left,a.Bottom-a.top);
region2:=createellipticrgn(20,20,200,200);
combinergn(region1,region1,region2,RGN_DIFF);
setwindowrgn(hwnd,region1,true);
end;
 
AnimateWindow函数可实现(半)透明,不过,只在2000下有效。
 
public
{ Public declarations }
procedure cmerasebkgnd(var message:twmerasebkgnd);message wm_erasebkgnd;
end;//通过攫取windows消息


procedure tform1.cmerasebkgnd(var message:twmerasebkgnd);
begin
brush.Style:=bsclear;
inherited;
end;


这样就可以了
 
Win2000下的半透明窗体:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;

type
TForm1 = class(TForm)
Label1: TLabel;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//---------------------------------------------------------
function SetLayeredWindowAttributes(Handle: HWND;
COLORKEY: COLORREF; Alpha: BYTE; Flags: DWORD): Boolean; stdcall; external 'USER32.DLL';

Const
WS_EX_LAYERED = $80000;
LWA_ALPHA = 2;
//---------------------------------------------------------
sc_DragMove:longint=$F012;


var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin

SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Form1.Handle, RGB(255,255,255), 180, LWA_ALPHA);
color:= RGB(55,55,55);

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(handle,wm_SysCommand,
sc_DragMove,0);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Close;
end;

end.
 
在delphi6中在窗体上放一个image,然后把窗体的transparentcolor属性
设成true,transparentcolorvalue设成图片的背景即可

另外,设置alphablend和alphablendvalue可以得到半透明的窗体

很酷的,记得,这是delphi6的特性哦!
 
下载一个lc3000控件
 
可以用api函数,不过不可接受消息了
 
后退
顶部