想要达到如下效果:(100分)

  • 主题发起人 主题发起人 jobsxy
  • 开始时间 开始时间
J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
比如有一主FORM1,还有一子FORM2
当FORM1调出FORM2时,即form2.showmodal时,Form1变暗,当然了,当Form2退出而Form1获得
焦点后恢复正常,该如何做呢?
 
做特技呢,华而不实可不好
 
哼哼,你只要在“桌面|属性”里面设置windows的未激活窗口的颜色就可以了
 
Form1通过ShowModal方式调出Form2以后,Form1的标题本来就是变暗了啊!
如果您的意思是让Form1的整个窗体都变暗的话,那么你可以在ShowModal之前
把Form1的Color 变暗呀,然后在ShowModal之后在变回去!
 
SS2000:这可不是华而不实,因为我需要弹出窗口很醒目,当然也可以用别的方式达此目的,
但用此方式实现难道不好吗?至于实现的难度那是另一码事了

一个过客:不会吧,如此我有必要在这里提问吗?

宁柯:变Form的Color???那Form上的其他控件呢?我一个个的变吗?
 
在FORM2的SHOW事件里对FORM1的灰度做处理,如把各Label及Edit等的enabled设为false
在Form2的Close事件中再把它恢复过来
 
to wwolf:灰度处理应该如何处理呢?好象并不是改变Color这么简单,我想大多数人都用过
JetCar或FaxMail,它们都会有个小悬浮窗口,这个窗口透下去的任何部件都变暗了,记得有
篇文章介绍过实现原理,可忘了出处,:(
 
>>>它们都会有个小悬浮窗口,这个窗口透下去的任何部件都变暗了
这个悬浮窗口是半透明的窗口。
在D6中通过设置Form的 AlphaBlend 和 AlphaBlendValue 达到这种效果。
 
你可以把form1保存成一副bmp图,变暗后显示
 
谢谢jrq,您觉得用AlphaBlend 和 AlphaBlendValue能否实现我开题所说的效果呢?
我试了一下,发现效果不太好
 
unit Unit1;

interface

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

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;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;
var
Form1: TForm1;

implementation

{$R *.DFM}

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);
SetLayeredWindowAttributes (handle, 0, 200, LWA_ALPHA);
//第二个参数是指定透明颜色2-255
end;
end.
你可以这样做,当form2.show的时候执行form1中的FormCreate,当然这过程是我做的一个演示
你可以定义为你自己需要的过程

呵呵 赶快给分吧
 
补充一下再2000下编译通过
 
to 墙头草:您所实现的效果同jrq所介绍的一样,而且用Form自带的方法更简单一些,呵呵。
 
可以用jrq的方法.
在Form1的Active属性中设置AlphaBlend := False;
AlphaBlendValue := 255;
在Form2的Active属性中改 Alphablend := True;
AlphaBlendValue := 125;
你还可以根据需要改颜色。
 
多人接受答案了。
 

Similar threads

回复
0
查看
615
谦行
S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
后退
顶部