一个屏幕显示的技术问题(100分)

  • 主题发起人 主题发起人 陈礼泉
  • 开始时间 开始时间

陈礼泉

Unregistered / Unconfirmed
GUEST, unregistred user!
大家可能见过以前的品牌机键盘上有一排特殊的按键,比如,可以直接按键调系统的声音大小,同时屏幕上出现一个透明的区域,并有音量增大,减小的状态条动态显示。我想问的是,如果通过软件,如何实现这种透明显示的效果呢?直接用一个窗体,将其CreateParam设置成透明似乎没有效果,因为它下面的内容看不到,并没有透明的效果;难道是直接采用GDI做的吗? 欢迎讨论赐教! 谢谢
 
http://www.delphiboy.com/cgi-bin/doc/datacontent.php?no=252
 
半透明窗,适用于Win2K以上。
---------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TForm1 = class(TForm)
TrackBar1: TTrackBar;
procedure FormCreate(Sender: TObject);
procedure FormDblClick(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
// 窗体透明度的API函数
function SetLayeredWindowAttributes(Handle : HWND; COLORKEY : COLORREF; Alpha : BYTE; Flags : DWORD) :Boolean;stdcall; external 'USER32.DLL';

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(Handle, 0, 220, LWA_ALPHA);
end;

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

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then // 移动窗体
begin
ReleaseCapture;
Perform( WM_SYSCOMMAND, $F012, 0 );
end;
end;
end.
 
可以采用比较笨但绝对有效,适合windows任何平台
在窗口的paint或相关的消息中,再画窗体遮住的部分.....
 
我在做的一个Mp3播放软件中,这个问题是直接在桌面上绘图,但似乎又碰到了加外一个难题,就是显示后怎么清除呢?
 
后退
顶部