现在要在Windows桌面画一个十字坐标系,并显示屏幕该点象素的坐标值及RGB值。应该如何下手啊。请各位帮忙了。

解决方案 »

  1.   

    看一看抓图软件的源码就会了~~
    baidu里面搜索一下
      

  2.   

    用这个TScreen.Canvas,就和delphi普通窗口一样。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, ExtCtrls;type
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        MainMenu1: TMainMenu;
        z1: TMenuItem;
        sin1: TMenuItem;
        cos1: TMenuItem;
        cls1: TMenuItem;
        exit1: TMenuItem;
        procedure FormPaint(Sender: TObject);
        procedure exit1Click(Sender: TObject);
        procedure sin1Click(Sender: TObject);
        procedure cls1Click(Sender: TObject);
        procedure cos1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormPaint(Sender: TObject);
    var oldx,oldy,xt,yt:integer;
        st:real;
        //rect1:trect;
        const pi=3.14159;
    begin
       paintbox1.Top:=0;
       paintbox1.Left:=0;
       paintbox1.Width:=form1.clientWidth;
       paintbox1.Height:=form1.clientHeight;
       canvas.Pen.Color:=clblack;   oldx:=round(form1.ClientWidth/2);
       oldy:=round(form1.ClientHeight/2);
       paintbox1.Canvas.MoveTo(oldx,0);
       paintbox1.Canvas.LineTo(oldx,paintbox1.Height);
       paintbox1.Canvas.MoveTo(0,oldy);
       paintbox1.Canvas.LineTo(paintbox1.Width,oldy);   for xt:=-9 to 9 do
         if xt<>0 then
         begin
          st:=xt*10*pi;
          paintbox1.Canvas.MoveTo(oldx+round(st),oldy-1);
          paintbox1.Canvas.LineTo(oldx+round(st),oldy);
          paintbox1.Canvas.TextOut(oldx+round(st)-10,oldy+1,inttostr(xt)+'/2π');
       end;
       for yt:=-9 to 9 do
       if yt<>0 then
       begin
        st:=yt*20;
        paintbox1.Canvas.MoveTo(oldx+1,oldy+round(st));
        paintbox1.Canvas.LineTo(oldx,oldy+round(st));
        paintbox1.Canvas.TextOut(oldx-20,oldy+round(st),inttostr(yt));
      end;
    end;procedure TForm1.exit1Click(Sender: TObject);
    begin
    form1.Free;
    end;procedure TForm1.sin1Click(Sender: TObject);
    var oldx,oldy,t:integer;
    xt,yt:real;
    begin
      oldx:=round(form1.ClientWidth/2);
      oldy:=round(form1.ClientHeight/2);
      for t:=-oldx to oldx do
      begin
       xt:=t/20;
       yt:=sin(xt);
      paintbox1.Canvas.Pixels[t+oldx,oldy+round(yt*20)]:=clblack;
      end;
    end;procedure TForm1.cls1Click(Sender: TObject);
    begin
    paintbox1.Refresh;
    end;procedure TForm1.cos1Click(Sender: TObject);
    var oldx,oldy,t:integer;
    xt,yt:real;
    begin
      oldx:=round(form1.ClientWidth/2);
      oldy:=round(form1.ClientHeight/2);
      for t:=-oldx to oldx do
      begin
       xt:=t/20;
       yt:=cos(xt);
      paintbox1.Canvas.Pixels[t+oldx,oldy+round(yt*20)]:=clblack;
      end;
    end;end.
    这个怎么样............
      

  4.   

    ls的好像结果不满足lz的要求哦
    lz可以考虑一下先把屏幕截取下来,然后对截取的屏幕转换成位图再操作,我这里有个类似的例子,lz想要的话留下EMail哈
      

  5.   

    [email protected]发我这个邮箱吧。谢谢