windows api相关(100分)

  • 主题发起人 主题发起人 kiven_lu
  • 开始时间 开始时间
K

kiven_lu

Unregistered / Unconfirmed
GUEST, unregistred user!
再form显示时,我用了windows api 函数
const
cMaxLblCaption: array [Boolean] of string = ('1', '2');
cWinMaxState: array [Boolean] of TWindowState = (wsNormal, wsMaximized);
WS_EX_LAYERED = $80000;
AC_SRC_OVER = $0;
AC_SRC_ALPHA = $1;
AC_SRC_NO_PREMULT_ALPHA = $1;
AC_SRC_NO_ALPHA = $2;
AC_DST_NO_PREMULT_ALPHA = $10;
AC_DST_NO_ALPHA = $20;
LWA_COLORKEY = $1;
LWA_ALPHA = $2;
ULW_COLORKEY = $1;
ULW_ALPHA = $2;
ULW_OPAQUE = $4;
procedure Tform_originality.FormCreate(Sender: TObject);
var
l:longint;
begin
l:=getWindowLong(Handle, GWL_EXSTYLE);
l := l Or WS_EX_LAYERED;
SetWindowLong (handle, GWL_EXSTYLE, l);
SetLayeredWindowAttributes (handle, 0, 245, LWA_ALPHA);
end;

用于使窗体实现半透明,可当窗体显示时,总是先出现一片黑色区域,然后在显示,刷新很慢,
不知有没有方法可解决????
 
透明是这样做的:
type
TForm1 = class(TForm)
private
{ Private declarations }
PROCEDURE CMEraseBkgnd(var Message:TWMEraseBkgnd);
Message WM_ERASEBKGND;
public
end;

PROCEDURE Tform1.CMEraseBkgnd(var Message:TWMEraseBkgnd);
BEGIN
brush.style:=bsClear;
Inherited;
END;
你没有设刷子。
 
我试了,不行
 
jsxjd提供的是全透明的,你需要自己重新绘制窗口覆盖的区域,
达到半透明效果。
 
不明白。
Delphi不是已经提供这个功能了吗?
看看Borland怎么写的。
 
D6 里的 Form 已经有
AlphaBlendValue
AlphaBlend
这两个属性了,当然底层还是调 API
变黑是 Windows 的问题,因为Windows要重画。
可以先把 Form AlphaBlend 设好了再 Show 出来。
AlphaBlend True 之后,调整 AlphaBlendValue 就很平滑了。
 
后退
顶部