随风飞音(Mcool)是一个简单音乐播放器,支持歌词、可视化,全透明界面。现在公开界面部分源码(包括透明窗体、ListView自绘和滚动条),欢迎同学们批评指正。下载:http://files.cnblogs.com/diystar/mcoolsrc.zip
主页:http://diystar.cnblogs.com/

解决方案 »

  1.   

    贴一下透明窗体代码:
    //一句(关键)代码实现全透明 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.
      

  2.   

    已上传至下载中心
    http://download.csdn.net/detail/diystar2/3689000
    bdmh斑竹能否帮忙把链接加到顶楼?
      

  3.   

    个人一直在关注小米手机。而且小米科技即将推出手机的消息成为了Android手机用户们关注的重点,小米手机似乎成为了新一届的国产手机希.
      

  4.   

    delphi在界面部分开源的比VB还少,严重支持!
      

  5.   

    delphi都没易语言活跃,看易语言论坛上的界面,都是GDI+,有仿QQ的,金山的,360的,个个都是十分逼真!DELPHI啊……跟错了东家了,跟百度,QQ,都比跟那啥强
      

  6.   

    效果不错,只试了下exe,代码太多没细看。我想问下楼主,你这种透明虽然是实现了,但我想在窗体上放个按扭什么的,都显示不了,那你这个代码重复利用率有多高呢?简单的建个工程设置
      Self.AlphaBlendValue:=50;
      Self.AlphaBlend:=True;
    也实现了类似的效果,不用写太多代码。
      

  7.   

    主要是突出文字显示,而背景要更透明些。要实现各种控件功能,就要一一自绘了。看下我的实例Mcool。