随风飞音(Mcool)是一个简单音乐播放器,支持歌词、可视化,全透明界面。现在公开界面部分源码(包括透明窗体、ListView自绘和滚动条),欢迎同学们批评指正。下载:http://files.cnblogs.com/diystar/mcoolsrc.zip
主页:http://diystar.cnblogs.com/
解决方案 »
- adodataset能感知数据集中哪些数据变化呢?
- delphi 设计时,数据库内容能显示,运行时却出错?
- 请教!如何排序?我问的问题都没人给出方法啊
- 帮忙,关于TQUERY的SQL里面嵌入主变量的问题!
- 各位请进,来拿分
- excel:=CreateOleObject('Excel.Application');提示出错,怎么办?
- delphi中在类声明后声明的过程和public后声明的过程有何区别?
- 小弟有个问题请教:就是类似网上银行输入密码的那种控件,不知道怎么开发
- 很奇怪很奇怪的调用dll的问题,是delphi的高手来看看
- 请问:怎样才能从数据库中取出N天之内的数据?分很好拿吧!
- 指针与链表的使用
- 关于exe+bpl模式开发程序的几点疑惑,希望大家看下
//一句(关键)代码实现全透明 by diystar.cnblogs.com
//改进版0.2:减少拖动闪烁
//改进版0.3:改进Win7兼容性
//改进版0.4:提高性能
//改进版0.5:完美版,进一步提高性能,彻底解决Win7兼容性
//改进版0.6:gdi+版,果然强大易用,压轴!与前面版本虽形式不同,内里是一致的
{0.6版 主要贡献者 Aric Green http://www.codeproject.com/KB/GDI-plus/DesktopLyrics.aspx
以及 无幻 http://blog.csdn.net/akof1314/archive/2011/05/18/6430583.aspx}
//改进版0.7:修正内存泄漏问题(更换为IGDI+即可解决,但编译体积较大)
//期待你的改进,别忘了发我一份[email protected] tsForm;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, ExtCtrls, IGDIPlus;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
procedure UpdateDisplay(r: TRect);
procedure ShadowText(Bk: IGPGraphics; f:IGPFont; c,Shadow:TGPColor; l,t,
w,h: Single; Text: String);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}var
hdcScreen,m_hdcMemory: HDC;
g: IGPGraphics;procedure TForm1.FormCreate(Sender: TObject);
var
hdcTemp:HDC;
hBitMap:Windows.HBITMAP;
begin
Self.BorderStyle:=bsNone;
SetWindowLong(Self.Handle,
GWL_EXSTYLE,
GetWindowLong(Self.Handle,GWL_EXSTYLE)
or WS_EX_LAYERED); hdcTemp := GetDC(Self.Handle);
m_hdcMemory := CreateCompatibleDC(hdcTemp);
hBitMap := CreateCompatibleBitmap(hdcTemp,ClientWidth,ClientHeight);
SelectObject(m_hdcMemory,hBitMap);
hdcScreen := GetDC(Self.Handle);
g := TGPGraphics.Create(m_hdcMemory);
if Win32MajorVersion>5 then
g.SetTextRenderingHint(TextRenderingHintAntiAliasGridFit);
ReleaseDC(Self.Handle,hdcTemp);
DeleteObject(hBitMap);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
ReleaseDC(Self.Handle,hdcScreen);
DeleteDC(m_hdcMemory);
end;procedure TForm1.FormActivate(Sender: TObject);
begin
Self.Refresh;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
UpdateDisplay(ClientRect);
end;procedure TForm1.UpdateDisplay(r: TRect);
var
brush: IGPSolidBrush;
pen:IGPPen;
f:IGPFont;
GPRectF: TGPRectF;
r2:TRect;
blend: BLENDFUNCTION;
ptWinPos,ptSrc: TPoint;
sizeWindow: SIZE;
begin
g.SetCompositingMode(CompositingModeSourceCopy);
brush := TGPSolidBrush.Create(MakeColor(1,255,255,255));
g.SetClip(MakeRect(r));
g.FillRectangle(brush,MakeRect(r)); //处理边框和文字
g.SetCompositingMode(CompositingModeSourceOver);
r2:=ClientRect;
r2.Bottom:=r2.Bottom-1;
r2.Right:=r2.Right-1;
pen := TGPPen.Create(MakeColor(64,0,0,0),1);
g.DrawRectangle(pen,MakeRect(r2));
InflateRect(r2,-1,-1);
pen.SetColor(MakeColor(96,255,255,255));
g.DrawRectangle(pen,MakeRect(r2)); f:=TGPFont.Create(Self.Canvas.Handle);
GPRectF:=MakeRectF(0,0,ClientWidth,ClientHeight);
GPRectF:=g.MeasureStringF('Transparent Window',f,GPRectF);
ShadowText(g,f,MakeColor(254,255,255,255),MakeColor(58,0,0,0),10,10,GPRectF.Width,GPRectF.Height,'Transparent Window');
// with blend do
begin
BlendOp := AC_SRC_OVER;
BlendFlags := 0;
AlphaFormat := AC_SRC_ALPHA;
SourceConstantAlpha := 255;
end;
ptWinPos := Point(Self.Left,Self.Top);
sizeWindow.cx := ClientWidth;
sizeWindow.cy := ClientHeight;
ptSrc := Point(0,0); //关键的一句
UpdateLayeredWindow(Self.Handle,
hdcScreen,
@ptWinPos,
@sizeWindow,
m_hdcMemory,
@ptSrc,
0,
@blend,
ULW_ALPHA);
end;procedure TForm1.ShadowText(Bk: IGPGraphics; f: IGPFont; c,Shadow: TGPColor;
l,t,w,h: Single; Text: String);
var
strFormat: IGPStringFormat;
brush: IGPSolidBrush;
pen:IGPPen;
i,j:Single; procedure DrawText;
begin
g.DrawStringF(Text,f,MakeRectF(i,j,w,h),strFormat,brush);
end;begin
strFormat := TGPStringFormat.Create();
brush := TGPSolidBrush.Create(Shadow);
pen:=TGPPen.Create(Shadow); i:=l+1; j:=t+1; DrawText;
i:=l-1; j:=t-1; DrawText;
i:=l+1; j:=t-1; DrawText;
i:=l-1; j:=t+1; DrawText;
i:=l ; j:=t+1; DrawText;
i:=l ; j:=t-1; DrawText;
i:=l+1; j:=t; DrawText;
i:=l-1; j:=t; DrawText; brush.SetColor(c);
pen.SetColor(c);
i:=l; j:=t; DrawText;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SysCommand,$f017,0);
end;end.
http://download.csdn.net/detail/diystar2/3689000
bdmh斑竹能否帮忙把链接加到顶楼?
Self.AlphaBlendValue:=50;
Self.AlphaBlend:=True;
也实现了类似的效果,不用写太多代码。