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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    unit Unit1;interfaceuses
      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.
      

  5.   

    重点:
        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;