我想做一个窗口程序,来实时的反应某程序窗口某点上的颜色,该如何做啊。

解决方案 »

  1.   

    procedure TfrmMain.FormCreate(Sender: TObject);
    var
      MRect: TRect;
    begin
      SystemParametersInfo(SPI_GETWORKAREA, 0, @MRect, 0);
      Left := MRect.Right - Width;
      Top := MRect.Bottom - Height;
    end;procedure TfrmMain.TimerTimer(Sender: TObject);
    var
      Pos: TPoint;
      Handle: HWND;
      ScreenDC: HDC;
      Buf: array[0..1024] of Char;
      ScreenColor: COLORREF;
    begin
      GetCursorPos(Pos);                                   // 得到当前光标位置
      Handle := WindowFromPoint(Pos);                      // 返回当前位置的句柄
      HandleText.Caption := IntToStr(Handle);
      GetClassName(Handle, Buf, 1024);                    // 得到类名
      ClassNameText.Caption := Buf;
      SendMessage(Handle, WM_GETTEXT, 33, Integer(@Buf)); // 得到标题
      TitleText.Caption := Buf;  { 得到光标处点的颜色 }
      ScreenDC := GetDC(0);
      ScreenColor := GetPixel(ScreenDC, Pos.X, Pos.Y);
      Shape.Brush.Color := TColor(ScreenColor);
      edtRGBColor.Text := '红:' + IntToStr(GetRValue(ScreenColor)) +
        '  绿:' + IntToStr(GetGValue(ScreenColor)) + '  蓝:' +
        IntToStr(GetBValue(ScreenColor));
      ReleaseDC(0, ScreenDC);
      edtHtmlColor.Text := Format('#%2.2x%2.2x%2.2x', [GetRValue(ScreenColor), GetGValue(ScreenColor), GetBValue(ScreenColor)]);
      edtColor.Text := Format('$%2.2x%2.2x%2.2x', [GetBValue(ScreenColor), GetGValue(ScreenColor), GetRValue(ScreenColor)]);
    end;