不要显示窗口的那种,只显示一个图片,无边框,还是实现鼠标点图片上拖动就可以移动功能(有点类似桌面小游戏的程序)应该如何实现??

解决方案 »

  1.   

    先在窗口上放一幅图片,设为透明,再将窗体设置为透明的无边框的。TransparentColor设为True,TransparentColorValue设置要变为透明的颜色(窗口背景色).
      

  2.   

    我专门的API用来创建不规则窗口的,查一下CSDN吧,会有帖子的
      

  3.   

    呵呵,那我就来贴一段点击图片移动窗体的代码吧:var
      Form1: TForm1;
      mpos:tpoint;
      ismove:boolean = false;implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    mpos.X:=x;
    mpos.Y:=y;
    ismove:=true;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    with form1 do
    if ismove then
     begin
      Left := Left - (MPos.X-X);
      Top := Top - (MPos.Y-Y);
     end;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    ismove:=false;
    end;end.
      

  4.   

    API,要不用一楼的, 这里的API区看看呀,多的是呢
      

  5.   

    1stclass也有,早来看看源程序吧
      

  6.   

    Q:如何将窗体设置为透明????
    A:d6/d7 直接在窗体里就可以设置,具体名字给忘了,就有ABC开头的区。D5需要一个WIN2K的控件
      

  7.   

    好啊,楼上的请发到我的信箱
    [email protected]
      

  8.   

    //此函数通过一张位图来创建一个区域,支持bmp格式和jpg格式
    //位图中黑色的地方将不透明,非黑色的地方透明,
    //创建完毕后可以通过SetWindowRgn函数设置窗口或控件的形状,如:
    //setWindowRgn(handle,zjs_createImageRegion('c:\goomoo.bmp'),true);
    uses jpeg;
    function zjs_createImageRegion(imageFile:TFilename):HRGN;
    var
      bitmap:TBitmap;             //位图对象
      jpg:TJpegImage;
      hRegion,hTmpRegion:HRGN;    //hRegion: 最终区域 hTmpRegion 临时区域
      h,l,left,right:integer;    //h:行 l:列  left:临时区域的左边 right:临时区域的右边
      started:Boolean;    //是否开始记录
      ext:String;         //图片扩展名
    begin
      if not fileExists(imageFile) then
      begin
        result:=0;
        exit; //文件不存在则退出,并返回0
      end;
      bitmap:=TBitmap.Create;
     try
      ext:=extractFileExt(imageFile); ext:=lowerCase(ext);
      if (ext='.jpg') or (ext='.jpeg') then   //如果是jpg图片
      begin
        jpg:=TJpegImage.Create;
        try
          jpg.LoadFromFile(imageFile);
          bitmap.Assign(jpg);     //从Jpg中把位图拷贝过来
        finally
          jpg.Free;               //及时释放jpg
        end;
      end
      else if ext='.bmp' then
        bitmap.LoadFromFile(imageFile)   //载入位图
      else
      begin
        result:=0;
        exit;
      end;  hRegion:=createRectRgn(0,0,0,0);    //创建一个初始的空的区域
      //初始化变量,消除警告信息
      left:=0; right:=0;
      //开始扫描图片的每个像素
      for h:=0 to bitmap.Height-1 do
      begin
        started:=false;   
        for l:=0 to bitmap.Width-1 do
        begin
          if bitmap.Canvas.Pixels[l,h]=clBlack then   //黑色为不透明区域,其他颜色为透明区域
          begin
            if not started then
            begin
              started:=true;    //开始记录右边
              left:=l; right:=l+1;
            end
            else    //started
            begin
              right:=l;
            end;
          end
          else
          begin
            if started then     //如果已经开始并且该点的颜色不是黑色
            begin
              started:=false;   //结束记录右边
              hTmpRegion:=createRectRgn(left,h,right,h+1);
              combineRgn(hRegion,hRegion,hTmpRegion,RGN_OR);
            end;
          end;
        end;
        if started then   //到了图片的右边还没有结束
        begin
          if right>bitmap.Width-1 then right:=bitmap.Width-1;
          hTmpRegion:=createRectRgn(left,h,right,h+1);
          combineRgn(hRegion,hRegion,hTmpRegion,RGN_OR);
        end;
      end;
     finally
      bitmap.Free;
     end;
      Result:=hRegion;
    end;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
      

  9.   

    //完整程序的源代码:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,JPEG;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
      private
        { Private declarations }
        procedure ncHitTest(VAR _msg:TMessage);message WM_NCHITTEST;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    PROCEDURE TFORM1.ncHitTest;
    BEGIN
      _MSG.Result:=HTCAPTION;
    END;//此函数通过一张位图来创建一个区域,支持bmp格式和jpg格式
    //位图中黑色的地方将不透明,非黑色的地方透明,
    //创建完毕后可以通过SetWindowRgn函数设置窗口或控件的形状,如:
    //setWindowRgn(handle,zjs_createImageRegion('c:\goomoo.bmp'),true);function zjs_createImageRegion(imageFile:TFilename):HRGN;
    var
      bitmap:TBitmap;             //位图对象
      jpg:TJpegImage;
      hRegion,hTmpRegion:HRGN;    //hRegion: 最终区域 hTmpRegion 临时区域
      h,l,left,right:integer;    //h:行 l:列  left:临时区域的左边 right:临时区域的右边
      started:Boolean;    //是否开始记录
      ext:String;         //图片扩展名
    begin
      if not fileExists(imageFile) then
      begin
        result:=0;
        exit; //文件不存在则退出,并返回0
      end;
      bitmap:=TBitmap.Create;
     try
      ext:=extractFileExt(imageFile); ext:=lowerCase(ext);
      if (ext='.jpg') or (ext='.jpeg') then   //如果是jpg图片
      begin
        jpg:=TJpegImage.Create;
        try
          jpg.LoadFromFile(imageFile);
          bitmap.Assign(jpg);     //从Jpg中把位图拷贝过来
        finally
          jpg.Free;               //及时释放jpg
        end;
      end
      else if ext='.bmp' then
        bitmap.LoadFromFile(imageFile)   //载入位图
      else
      begin
        result:=0;
        exit;
      end;  hRegion:=createRectRgn(0,0,0,0);    //创建一个初始的空的区域
      //初始化变量,消除警告信息
      left:=0; right:=0;
      //开始扫描图片的每个像素
      for h:=0 to bitmap.Height-1 do
      begin
        started:=false;   
        for l:=0 to bitmap.Width-1 do
        begin
          if bitmap.Canvas.Pixels[l,h]=clBlack then   //黑色为不透明区域,其他颜色为透明区域
          begin
            if not started then
            begin
              started:=true;    //开始记录右边
              left:=l; right:=l+1;
            end
            else    //started
            begin
              right:=l;
            end;
          end
          else
          begin
            if started then     //如果已经开始并且该点的颜色不是黑色
            begin
              started:=false;   //结束记录右边
              hTmpRegion:=createRectRgn(left,h,right,h+1);
              combineRgn(hRegion,hRegion,hTmpRegion,RGN_OR);
            end;
          end;
        end;
        if started then   //到了图片的右边还没有结束
        begin
          if right>bitmap.Width-1 then right:=bitmap.Width-1;
          hTmpRegion:=createRectRgn(left,h,right,h+1);
          combineRgn(hRegion,hRegion,hTmpRegion,RGN_OR);
        end;
      end;
     finally
      bitmap.Free;
     end;
      Result:=hRegion;
    end;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    procedure TForm1.FormCreate(Sender: TObject);
    var
      reg:hRGN;
    begin
      form1.BorderStyle:=bsNone;
      REG:=zjs_createImageRegion('c:\mask.bmp');
      setWindowRgn(self.Handle,reg,true);
      
    end;procedure TForm1.FormPaint(Sender: TObject);
    var
      bmp:TBitmap;
    begin
      bmp:=tbitmap.Create;
      bmp.LoadFromFile('c:\goomoo.bmp');
      form1.Canvas.Draw(0,0,bmp);
      bmp.Free;
    end;end.
      

  10.   

    我的主页: http://www.goomoo.net记得结贴哦^