很神奇!
原来我们把窗口背景色透明后,在透明的地方按右键,出来的是桌面的右键。但千千5.5的歌词就不是,透明了一样可以弹出歌词秀的菜单,它是怎么做到的?越简单越好。

解决方案 »

  1.   

    最简单的放一个Label在最上面设成透明,在响应label的事件
      

  2.   

    试试这个效果你就知道了
    unit Unit1; interface uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    ExtCtrls, StdCtrls, Buttons; type 
    TForm1 = class(TForm) 
    Image1: TImage; 
    Button1: TButton; 
    procedure FormCreate(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
    private 
    function CreateRegion(wMask: TBitmap; wColor: TColor; 
    hControl: THandle): HRGN; 
    { Private declarations } 
    public 
    { Public declarations } 
    end; var 
    Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    Close; 
    end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
    begin 
    ReleaseCapture; 
    SendMessage(Handle, WM_SYSCOMMAND, $F012, 0); 
    end;  ///////////////////////////////////// 
    用汉字做窗体形状 
    procedure TForm1.FormCreate(Sender: TObject); 
    var 
    rgn:HRGN; 
    begin 
    BeginPath(Canvas.Handle); 
    SetBkMode( Canvas.Handle, TRANSPARENT ); 
    Canvas.Font.Name:= '宋体'; 
    Canvas.Font.Size:=100; 
    Canvas.TextOut( 20, 20, '漂亮吗?');//用"漂亮吗?"作为form的形状 
    EndPath(Canvas.Handle); 
    rgn:= PathToRegion(Canvas.Handle); 
    SetWindowRgn( Handle, rgn, true ); 
    end;  end.   
      

  3.   

    function CreateRegion(wMask: TBitmap; wColor: TColor; 
    hControl: THandle): HRGN; 
    这个函数没用,你直接删掉
      

  4.   


    没错我就是在窗体上把TransparentColor(value)两个值设好就行了,
    透明标签也是拦不到的,试过了。有个笨办法就是拦WM消息,但是不对劲的。效率也不高。
      

  5.   

    透明的方式不至一种。比如你设置form1.AlphaBlend:=true和Form1.AlphaBlendValue值为10,然后在窗体上设置右键,这时看起来是透明了,其实你右击,菜单还是有的。
      

  6.   

    我用了消息拦截+PtAtRect函数搞定了……