我不太会api,所以找到这个过程,要修改为最下面的过程以便完成工作
procedure TForm1.Button1Click(Sender: TObject);
var
hCurWindow:HWnd;//窗口句柄
WinText:array[0..255] of char;
begin
hCurWindow:=GetWindow(Handle,GW_HWNDFIRST);
//获取第一个窗口的句柄
while hCurWindow<>0 do
begin
if GetWindowText(hCurWindow,@WinText,255)>0then
//获取窗口的名称
Memo1.Lines.Add(StrPas(@WinText));
hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT);
//获取下一个窗口的句柄
end;
end;
这里我是要替换执行的过程的,因为我不会api语法,只能用以上这个过程来推测自己要完成的的过程,我的过程工作是
需要把在活动的其他任何程序的Window捕获其句柄,设置其属性为半透明的过程,使用到这些函数,在那里声明我也不清楚
function GetActiveWindow:HWND;
function SetLayeredWindowAttributes(hwnd:HWND;crKey:integer;bAlpha:byte;dwFlags:integer):integer;stdcall;external user32;
我认为过程是这样的,因为和delphi语法有差别所以朋友可以帮忙翻译吗?
procedure TForm1.Button1Click(Sender: TObject);
begin
hCurWindow:=GetActiveWindow(Handle,GW_HWNDFIRST);这里应该修改成为这个while 每当找到有焦点的hCurWindow<>0 do执行以下过程
begin
if GetWindowText(hCurWindow,@WinText,255)>0 then
(应该使用成为这个GetActiveWindow:HWND;还是SetWindowLong(handle, GWL_EXSTYLE,)//)
总之把窗体设为半透明应该使用这些语句GetActiveWindows(0)
SetWindowLong(handle, GWL_EXSTYLE,)//
GetWindowLong(handle, GWL_EXSTYLE); 把新的样式赋给窗体
SetLayeredWindowAttributes(handle, 0, 192, LWA_ALPHA);
procedure TForm1.Button1Click(Sender: TObject);
var
hCurWindow:HWnd;//窗口句柄
WinText:array[0..255] of char;
begin
hCurWindow:=GetWindow(Handle,GW_HWNDFIRST);
//获取第一个窗口的句柄
while hCurWindow<>0 do
begin
if GetWindowText(hCurWindow,@WinText,255)>0then
//获取窗口的名称
Memo1.Lines.Add(StrPas(@WinText));
hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT);
//获取下一个窗口的句柄
end;
end;
这里我是要替换执行的过程的,因为我不会api语法,只能用以上这个过程来推测自己要完成的的过程,我的过程工作是
需要把在活动的其他任何程序的Window捕获其句柄,设置其属性为半透明的过程,使用到这些函数,在那里声明我也不清楚
function GetActiveWindow:HWND;
function SetLayeredWindowAttributes(hwnd:HWND;crKey:integer;bAlpha:byte;dwFlags:integer):integer;stdcall;external user32;
我认为过程是这样的,因为和delphi语法有差别所以朋友可以帮忙翻译吗?
procedure TForm1.Button1Click(Sender: TObject);
begin
hCurWindow:=GetActiveWindow(Handle,GW_HWNDFIRST);这里应该修改成为这个while 每当找到有焦点的hCurWindow<>0 do执行以下过程
begin
if GetWindowText(hCurWindow,@WinText,255)>0 then
(应该使用成为这个GetActiveWindow:HWND;还是SetWindowLong(handle, GWL_EXSTYLE,)//)
总之把窗体设为半透明应该使用这些语句GetActiveWindows(0)
SetWindowLong(handle, GWL_EXSTYLE,)//
GetWindowLong(handle, GWL_EXSTYLE); 把新的样式赋给窗体
SetLayeredWindowAttributes(handle, 0, 192, LWA_ALPHA);
解决方案 »
- Delphi 调用C++的DLL参数问题 Dll可否使用字符串数组?
- 怎样一次性创建多级目录?
- 请问怎么接受Postmessage过来的字符串?
- 如何临时更改TADOQuery对象/TDataSet对象中的字段值但不希望回写到数据库?
- select top i * from table order by xuehao desc 如果其中I是integer型的变量,这句话该怎么写?
- 请问如何简单的调用它
- 在DBGridEh控件中,点击TITLE后,如何按该列排序?
- 看看,怎样把psd或png或tif格式转换成bmp格式?来者有分!
- 我想使用delphi提取网页中的内容,请各位给点提示,最好有例子!
- 关于Kylix的问题
- 请问:delphi怎么将字符或数值转ASCLL码?
- 急需interbase,请问我应该去哪里下载丫,谢谢!
winme呢,毕竟是几年前的操作系统了,
在Win9x和WinME都不支持吧
我是阿水我用AK-47
SetLayeredWindowAttributes(Form1.Handle, 0, 192, LWA_ALPHA);还是无法实现半透明化啊?请指教!
GetWindowLong(handle, GWL_EXSTYLE); 你没有捕获句柄吗?
是在delphi里的设置
Form1.AlphaBlend:=True;
Form1.AlphaBlendValue:=100;
这里是我找到的现成货,我也不大会看
这里是调用的例子
var
FeatureEnabled: Boolean;
Initialized: Boolean;function InitLayeredWindows: Boolean;
var Module: THandle;
begin
Result:=True;
Module:=LoadLibrary('user32.dll');
if (Module=0) then
begin
Result:=False;
Exit;
end;
SetLayeredWindowAttributes:=GetProcAddress(Module, 'SetLayeredWindowAttributes');
if (Assigned(SetLayeredWindowAttributes)) then FeatureEnabled:=True;
Initialized:=True;
end;
这里是最有用的我还是不会看
begin
Result:=True;
if (not Initialized) then Result:=InitLayeredWindows;
if ((Result) and (FeatureEnabled)) then
begin
if (Percent<>0) then
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, (255 * Percent) div 100, LWA_ALPHA);
end else
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) xor WS_EX_LAYERED);
end;
end;
end;
编程实现窗体的半透明效果
如果你不是使用Windows2000+Delphi编程的话,我不想浪费你的时间。如果是,请继续。
大家都知道Windows 2000支持淡入淡出的窗体显示效果。如何让自己的应用程序也具备这种效果呢?前两天研究FormContainer的Form显示效果时(注:FormContainer是一个强大的Delphi特效处理控件,有兴趣的朋友可以访问http://www.billeniumsoft.com/),得高人告知,核心API函数就是SetLayeredWindowAttributes。
要实现淡入淡出效果,就需要实现窗口的可调整的透明效果。传统的Windows应用程序想实现透明效果,一般来说需要处理自己的窗口的WM_Paint消息,程序员需要GetDC获取屏幕的HDC,调用BitBlt函数将屏幕将要被覆盖的区域拷贝到内存的TBitmap对象中,然后对该Tbitmap的ScanLine二维数组逐象素的修改rgbtRed、rgbtGreen和rgbtBlue值。天哪,实在是太麻烦了。
Windows2000的API库中终于提供了半透明的窗体显示效果支持(虽然不是很完善)。要实现半透明的窗口效果,首先需要给创建的窗口添加WS_EX_LAYERED 扩展属性,这是一个新的窗口扩展属性,Delphi5并没有定义相应的常量和SetLayeredWindowAttributes函数,我们需要手工声明。function SetLayeredWindowAttributes(Handle: HWND;
COLORKEY: COLORREF; Alpha: BYTE; Flags: DWORD): Boolean; stdcall; external 'USER32.DLL';Const
WS_EX_LAYERED = $80000;
LWA_ALPHA = 2; 我们调用GetWindowLong函数获取当前窗口的扩展属性,并调用SetWindowLong函数将新的WS_EX_LAYERED窗口扩展属性添加进去。procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_LAYERED);
end; 现在我们的窗口已经可以调用SetLayeredWindowAttributes函数,通过设置该函数的Alpha参数,我们就可以看到窗口的效果的变化。procedure TForm1.Button1Click(Sender: TObject);
begin
SetLayeredWindowAttributes(Form1.Handle, 0, 180, LWA_ALPHA);
end; 以下的VCL控件代码封装了SetLayeredWindowAttributes函数,编程时动态改变AlphaValue值,您就可以看到窗口的透明效果了。控件屏蔽了设计期的显示效果,如果读者愿意可以改为设计期效果可见,不过那样的话,一不小心,您可能就会找不着你要设计的窗体了 8-) unit TranForm; {DragonPC 2001.2.21 }interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms ;type
TTranForm = class(TComponent)
private
FAlphaValue : integer ;
FParentFormHandle : HWND ;
procedure SetFAlphaValue(Alpha:integer) ;
protected
procedure UpdateDisplay ;
public
constructor Create(AOwner: TComponent); override;
published
property AlphaValue : integer read FAlphaValue write SetFAlphaValue ;
end;procedure Register;function SetLayeredWindowAttributes(Handle: HWND; COLORKEY: COLORREF;
Alpha: BYTE; Flags: DWORD): Boolean; stdcall; external 'USER32.DLL';implementationprocedure Register;
begin
RegisterComponents('Standard', [TTranForm]);
end;procedure TTranForm.SetFAlphaValue(Alpha: integer);
begin
if (Alpha >= 0) and (Alpha < 256) then begin
FAlphaValue := Alpha ;
UpdateDisplay() ;
end;
end;procedure TTranForm.UpdateDisplay;
begin
if (csDesigning in ComponentState) then Exit ;
SetLayeredWindowAttributes(FParentFormHandle, 0, FAlphaValue, 2);
end;constructor TTranForm.Create(AOwner: TComponent);
begin
inherited;
if (csDesigning in ComponentState) then Exit;
FAlphaValue := 255 ;
FParentFormHandle := TForm(AOwner).Handle ;
SetWindowLong(FParentFormHandle,
GWL_EXSTYLE,
GetWindowLong(FParentFormHandle, GWL_EXSTYLE) or WS_EX_LAYERED);
end;end. 谢谢您的莫大耐心得以看完此文,此文纯粹本着赚取china-pub"假币"目的所写,万一各位看官有任何的疑问,欢迎信至[email protected],谢谢。