怎样得到屏幕上包括窗体任一点的值?(Delphi)

来源:百度文库 编辑:神马文学网 时间:2024/05/01 04:53:57

抓取屏幕上一点的颜色应该怎么做?

楼主chons(不羁之城)2001-08-1417:25:51 在 Delphi / VCL组件开发及应用 提问

怎样得到屏幕上包括窗体任一点的值? 问题点数:20、回复次数:12Top

1 楼summernightrain(夏夜雨)回复于2001-08-14 18:12:12 得分 1

先抓取屏幕,再求该点颜色值。Top

2 楼xzgyb(老达摩)回复于2001-08-14 18:16:53 得分 1

http://www.csdn.net/expert/topic/230/230141.shtm有Top

3 楼appleyao(阿僚)回复于2001-08-14 18:30:41 得分 2

var   dc:TCanvas;  
  color:tcolorref;  
  begin  
     dc:=tcanvas.create;  
      dc.handle:=getdc(0);  
     color:=getPixel(dc.Handle,x,y);  
  end;  
   
   
  Top

4 楼ch81(missile)回复于2001-08-14 18:31:07 得分 2

var   DC:HDC;  
  var   Color:ColorRef;  
  begin    
     DC:=GetDC(0);  
      Color:=GetPixel(DC,x,y);//x,y为坐标  
  end;Top

5 楼TangDL(软件流氓)回复于2001-08-31 08:24:27 得分 1

问题是如何捕捉鼠标出了程序窗体外的活动Top

6 楼softcool(泰山)回复于2001-08-31 08:52:08 得分 1

做一个透明窗体,然后把窗体的windowstate=wsMaximized,利用onmousemove事件,就可以取到屏幕任意一点的颜色了Top

7 楼wangzh(独孤求问)回复于2001-08-31 09:21:42 得分 1

gzTop

8 楼TangDL(软件流氓)回复于2001-09-10 13:02:37 得分 4

unit   Unit1;  
   
  interface  
   
  uses  
     Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,  Forms,  
      Dialogs,   StdCtrls,   ExtCtrls;  
   
  type  
      TfrmGetColor   =   class(TForm)  
          pColor:   TPanel;  
          btnGet:   TButton;  
          btnExit:   TButton;  
         lInfo:   TLabel;  
          btnStop:   TButton;  
         tmCursor:   TTimer;  
          procedure   btnGetClick(Sender:   TObject); 
          procedure   btnExitClick(Sender:   TObject);  
         procedure   FormShow(Sender:   TObject);  
          procedure  btnStopClick(Sender:   TObject);  
          procedure  tmCursorTimer(Sender:   TObject);  
      private  
         isSet:Boolean;  
          {   Private   declarations   }  
      public 
          {   Public   declarations   }  
      end;  
   
 var  
      frmGetColor:   TfrmGetColor;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure  TfrmGetColor.btnGetClick(Sender:   TObject);  
  begin  
      if   not  isSet   then  
      begin  
          isSet:=True;  
         tmCursor.Enabled:=True;  
      end;  
  end;  
   
  procedure  TfrmGetColor.btnExitClick(Sender:   TObject);  
  begin  
      Close; 
  end;  
   
  procedure   TfrmGetColor.FormShow(Sender:  TObject);  
  begin  
     frmGetColor.Left:=(Screen.Width-frmGetColor.Width)   div   2;  
     frmGetColor.Top:=(Screen.Height-frmGetColor.Height)   div   2;  
  end;  
   
   
  procedure   TfrmGetColor.btnStopClick(Sender:   TObject); 
  begin  
      if   isSet   then  
      begin  
         isSet:=False;  
          tmCursor.Enabled:=False;  
      end;  
 end;  
   
  procedure   TfrmGetColor.tmCursorTimer(Sender:   TObject); 
  var  
      mDC:HDC;  
      mP:TPoint;  
     mColor:TColor;  
      mCanvas:TCanvas;  
      mRGB:LongInt;  
     mR,mG,mB:Integer;  
  begin  
      tmCursor.Enabled:=False;  
     try  
          mDC:=GetDC(0);  
          mCanvas:=TCanvas.Create;  
          try  
              mCanvas.Handle:=mDC;  
             GetCursorPos(mP);  
              mColor:=mCanvas.Pixels[mP.X,mP.Y];  
             mRGB:=ColorToRGB(mColor);  
              mB:=mRGB   div  $00010000;  
              mG:=(mRGB   mod   $00010000)   div   $00000100;  
              mR:=mRGB   mod   $00000100;  
             frmGetColor.Color:=mColor;  
              //lInfo.Font.Color:=TColor(mRGB  xor   $ffffffff);  
             lInfo.Caption:='R:'+IntToStr(mR)+#13+'G:'+IntToStr(mG)+#13+'B:'+IntToStr(mB);  
              lInfo.Caption:=lInfo.Caption+#13+'X:'+IntToStr(mP.X)+';  Y:'+IntTOStr(mP.Y);  
          finally  
             ReleaseDC(0,mDC);  
              mCanvas.Free;  
          end;  
     finally  
          if   isSet   then  
             tmCursor.Enabled:=true;  
      end;  
  end;  
   
  end.  
  Top

9 楼TangDL(软件流氓)回复于2001-09-10 13:04:07 得分 4

重点:  
          mDC:=GetDC(0);  
          mCanvas:=TCanvas.Create;  
          try  
              mCanvas.Handle:=mDC;  
             GetCursorPos(mP);  
              mColor:=mCanvas.Pixels[mP.X,mP.Y];  
             mRGB:=ColorToRGB(mColor);  
              mB:=mRGB   div  $00010000;  
              mG:=(mRGB   mod   $00010000)   div   $00000100;  
              mR:=mRGB   mod   $00000100;  
             frmGetColor.Color:=mColor;  
              //lInfo.Font.Color:=TColor(mRGB  xor   $ffffffff);  
             lInfo.Caption:='R:'+IntToStr(mR)+#13+'G:'+IntToStr(mG)+#13+'B:'+IntToStr(mB);  
              lInfo.Caption:=lInfo.Caption+#13+'X:'+IntToStr(mP.X)+';  Y:'+IntTOStr(mP.Y);  
          finally  
             ReleaseDC(0,mDC);  
              mCanvas.Free;  
          end;  
     Top

10 楼errorcode(errorcode)回复于2001-09-10 14:17:37 得分 0

 
  Canvas.Pixels[x,y]    
   
  Top

11 楼jacky_shenyi(jacky)回复于2001-09-10 20:07:27 得分 3

我自己做了一个,你要的话,告诉我你的联系方式。Top

12 楼chons(不羁之城)回复于2001-10-18 11:24:30 得分 0

chonsp@163.netTop

相关问题

  • 怎样用Delphi5抓取屏幕上任何一个点的颜色?
  • VB.NET中如何抓取屏幕上任何一个点的颜色呢?
  • 怎样抓取屏幕内容
  • 寻找屏幕抓取软件
  • 将当前屏幕抓取下来,并将鼠标指针也抓取下来。
  • 如何抓取远程计算机的屏幕
  • 抓取一个任意窗口或屏幕的图象
  • 怎么把抓取的屏幕数据保存下来?
  • 有关屏幕图象抓取的问题,高分相送!
  • C#怎么实现抓取屏幕并存为Bmp图像?