已经用
    SetWindowRGN(button1.handle,CreateEllipticRGN(0,0,60,20),true)
创建了一个椭圆形的按钮,但接下来的代码(如下)没有起作用……高手可以解释一下原因和提供一些解决思路么?    tbmp:=TBitmap.Create;
    tbmp.LoadFromResourceID(hinstance,001);
    tmpdc:=GetDC(button1.Handle);
    With TCanvas.Create do
        try
            handle:=tmpDC;
            Lock;
            draw(0,0,tbmp);
            Unlock;
        finally
            ReleaseDC(button1.Handle,tmpdc);
            free;
        end;
    tbmp.Free;

解决方案 »

  1.   

    tbmp:=TBitmap.Create;
        tbmp.LoadFromResourceID(hinstance,001);
        tmpdc:=GetDC(button1.Handle);//你这个DC在哪里用了????
        With TCanvas.Create do//这个Canvas临时创建了干嘛???
            try
                handle:=tmpDC;
                Lock;
                draw(0,0,tbmp);//这个位图是画在自己创建的Canvas上,肯定不起作用啦!            
                Unlock;
            finally
                ReleaseDC(button1.Handle,tmpdc);
                free;
            end;
        tbmp.Free;试试这样;
    从TButton继承,重载Paint过程,在工程中代码如下:
    var
      bmp:TBitmap;
      tmpDC:HDC;
    begin
      bmp:=TBitmap.Create;
      GetDC(Handl); 
      try 
        tbmp.LoadFromResourceID(hinstance,001);
        Bitblt(tmpDC,0,0,bmp.width,bmp.height,bmp.Canvas.handle,0,0,SRCCOPY);
      finally
        bmp.free;
        ReleaseDC(tmpDC);
      end;
    end;
    随便写的,这台机子上没Delphi,不过应该没什么问题.