最主要是取得了桌面的DC,并且设置为背景色透明:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} //把文字输出到屏幕 procedure TForm1.Button1Click(Sender: TObject); var cvs: TCanvas; Rect: TRect; Str: string; begin cvs := TCanvas.Create; // 现场创建 cvs.Handle := GetDC(0); SetBkMode(cvs.Handle, TRANSPARENT); // 设置指定DC的背景混合模式,应用于文字、画刷和画笔风格(当它们不是solid风格的时候),有OPAQUE和TRANSPARENT两种模式 //cvs.Font.Name := '宋体'; cvs.Font.Style := [fsBold, fsItalic]; cvs.Font.Size := 48; Randomize; cvs.Font.Color := Random($FFFFFF); Rect := Screen.DesktopRect; // 取得屏幕的区域 Str := '万一的 Delphi 博客'; cvs.TextRect(Rect, Str, [tfSingleLine, tfCenter, tfVerticalCenter]); // 在指定区域内输出文字,单行,居中,竖向居中。注意D7不支持此参数 cvs.Free; end; //刷新显示 procedure TForm1.Button2Click(Sender: TObject); begin InvalidateRect(0, nil, False); // API,消除上面的文字 end; end.
InvalidateRect API函数的说明:
hWnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送 WM_ERASEBKGND 和 WM_PAINT 给窗口过程处理函数。
lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。
bErase:指出无效矩形被标记为有效后,是否重画该区域,重画时用预先定义好的画刷。当指定TRUE时需要重画。
返回值:函数成功则返回非零值,否则返回零值。
说明:被标记为无效矩形的区域直到WM_PAINT消息被处理完之后才会消失,或者使用ValidateRect(),ValidateRgn()函数来使之有效。当应用程序的消息队列中为空时,并且窗体要更新的区域非空时,系统会发送一个WM_PAINT消息到窗体。