unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Brush.Style :=bsClear;//这里的实现方法用Delphi是最简单的了
Tag:=0; //使用Form的Tag属性作标志位end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Tag:=1; //置位
Canvas.MoveTo(X,Y); //将Pen的位置移到当前
Canvas.Pen.Width := 8;
Canvas.Pen.Color :=clred;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Tag=1 then
begin
Canvas.LineTo(x,y);//画线
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Tag:=0; //标志位
end;procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=27 then
begin
form1.WindowState:=wsMinimized;
end;
end;
end.
这段代码是从网上找到的,它只能画在自己的窗体上,我想实现在桌面或其它窗口上涂鸦,请问怎么办?
最好能给出代码!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Brush.Style :=bsClear;//这里的实现方法用Delphi是最简单的了
Tag:=0; //使用Form的Tag属性作标志位end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Tag:=1; //置位
Canvas.MoveTo(X,Y); //将Pen的位置移到当前
Canvas.Pen.Width := 8;
Canvas.Pen.Color :=clred;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Tag=1 then
begin
Canvas.LineTo(x,y);//画线
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Tag:=0; //标志位
end;procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=27 then
begin
form1.WindowState:=wsMinimized;
end;
end;
end.
这段代码是从网上找到的,它只能画在自己的窗体上,我想实现在桌面或其它窗口上涂鸦,请问怎么办?
最好能给出代码!
桌面有句柄的哦,GetDeskTopHandle可以获得桌面句柄
如果谁手里正好有此代码的话
请发工程文件到我的信箱中.
[email protected]
请发工程文件到我的信箱中.
[email protected]
应该可以看明白了
program MASK;
uses
windows,
Graphics; {$R *.res} var
DC:TCanvas;
i,j:integer;
begin
DC:=tcanvas.create;
DC.handle:=getdc(0);
for i:= 1 to 400 do begin
DC.MoveTo(400,300);
DC.LineTo(2*i,1);
DC.MoveTo(400,300);
DC.LineTo(2*i,600);
DC.MoveTo(400,300);
DC.LineTo(1,round(i*1.5));
DC.MoveTo(400,300);
DC.LineTo(800,round(i*1.5));
end;
DC.Pen.Color:=clred;
For j:= 1 to 120 do begin
DC.moveTo(600,1);
for i:= 1 to 800 do
DC.LineTo(i,600-round(i*i/(Sqr(j)/2)));
DC.moveTo(1,1);
for i:= 1 to 800 do
DC.LineTo(i,round(i*i/(Sqr(j)/2)));
end;
DC.Font.Size:=72 ;
DC.Font.Color:=clblue;
DC.Brush.Color:=clbackground;
DC.textout(10,100,'看不到了吧!');
end.
ACanvas: TCanvas;
begin
ACanvas := TCanvas.Create;
ACanvas.Handle := windows.GetDC(0); //GetDC(0) 表示,取得桌面的HDC, 如果画在其他窗口,就: GetDC(其他窗口的handle)
with ACanvas do
begin
Lock;
Pen.Color := clRed;
Pen.Width := 5;
MoveTo(0, 0);
LineTo(Screen.Width, Screen.Height);
MoveTo(Screen.Width, 0);
LineTo(0, Screen.Height);
Unlock;
end;
end;
GDI: Graphic Device Interface 图形设备接口DC: Device Context(还是Content) 设备上下文.
硬件厂家太多,显卡的型号太繁杂,如果想在屏幕上或者其他外设上输出图形,那么程序员就必须处理各种可能的硬件,就得写好多个case语句. Microsoft为了简化这个工作,就搞出了一个东西,姑且先称它为图形设备吧.这个设备内部是怎么实现的(和具体的显卡驱动程序有关),你不用管.
你只要会用它的接口就行了,也就是:图形设备接口. *****************************************
有关接口:(熟悉接口的同学,请跳出*号的范围)
接口,就是......功力不到家,我也不知道改怎么给它下定义. 郁闷...
举例说明:
mp3,现在很多人用来听歌的,算是个设备吧,这个设备,内部可能很复杂,集成电路的各种电子器件组成的,还有软件的部分...
不用怕,内部是什么构造,我们并不关心,我们只要会操作就行了,只要看看说明书,就知道,哪个键控制声音,哪个键开关机....
哈哈,现在好说明了,接口,就是这些按键......mp3的产品说明书,就是接口说明. 只要知道了接口是怎么定义的,就能使用这些接口.
当然了,使用接口之前,还必须取得这些接口. 为什么要取得接口?mp3的按键不是摆在那里吗?不是直接用就行了?
Microsoft可是个很大的公司,他们搞出来的东西,各种各样,光就一个mp3? 各种各样的dll文件,那是什么?那些都是函数库.仓库啊!仓库里面除了有mp3,还有DVD, DV, CCTV.....汗~~~~~ 所以你首先必须告诉windows,我要使用mp3的功能, 你把它的按键拿给我用用吧... 从请求,到摸到mp3的按键这个过程,就是取得接口的过程.*****************************************
你程序员不是要在外设上输出东西吗,ok,现在方便了,你要输出什么,输出在哪个位置,用什么颜色,什么字体......直接通过操作这些接口,
windows就自动去帮你画画去了......那些各种这样那样的显卡,怎么弄,怎么弄,全交给windows了.
DC: 不知道我理解得对不对,DC就是windows系统里面,在window上画图的机器.
windows系统里面的window多啊,一个DC哪够?于是,windows就生产了一大批名叫DC的机器,一个window分配一个DC去画...
机器多了,不容易认,就给机器编了号.
等等,等一下,编号是什么类型的??? 数字? 字符? 没错, 是数字. 可是windows里面的机器太多了,有DC,还有其他机器,比如画刷.
怎么知道 编号为1001的机器是什么?是DC?还是刷子? 于是,windows又分类了,又多了好多类型, 虽然最后这些编号的值都是数字,
但是这些设备上印刷的数字用的是不同的字体. 有称为HDC的字体,有名字叫HBRUSH的字体.
这样一来,对于一个编号为1001的HDC类型的机器,就固定了. 一看到数据类型是HDC的,就知道,哦,这是个编号,用这种编号,可以找到唯一的那个画图的机器.
好了,现在,我想在某个window上画图,光知道window的编号(Handle)没用啊,还得找到在这个编号的window上画图的那台该死的机器啊.于是,microsoft提供了一个函数: function GetDC(AWindowHandle: THandle): HDC;接下来,大家都知道怎么做了......散会!
不一定要在桌面写字,是在最顶层的窗体上,或说是当前的窗体上.窗体之间可以切换写字的
即在桌面写字,然后打开ie,也可以在ie窗体上写字.在之前写在桌面上的字,可以不保留.我的程序可以没有窗体
http://www.codeidea.com/cn/