如何把文字重绘在屏幕上(而不是Form上)?
unit Unit7;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TForm7 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
{$R *.dfm}
procedure TForm7.Button1Click(Sender: TObject);
const
arr: array of WideString = ('白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼');
a = 20; {横向间隔}
b = 20; {纵向间隔}
var
s: string;
x, y: Integer;
i, j: Integer;
begin
x := 20;
y := 20;
for i := 0 to Length(arr) - 1 do
begin
for j := 1 to Length(arr) do
begin
s := arr;
Canvas.TextOut(x, y, s);
x := x + Canvas.TextWidth(s) + a;
end;
x := 20;
y := y + Canvas.TextHeight(s) + b;
end;
end;
end.
print函数 sai609 发表于 2024-1-18 13:15
print函数
打印和绘制能一样吗{:1_925:} 在你的代码中,文字是在TForm7的Canvas上绘制的,因此它将在TForm7的客户区域上绘制文字。如果你想在屏幕上的其他地方绘制文字,而不是在窗体上,你可以使用Screen对象的Canvas属性来获取整个屏幕的Canvas。下面是修改后的代码:
unit Unit7;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TForm7 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
{$R *.dfm}
procedure TForm7.Button1Click(Sender: TObject);
const
arr: array of WideString = ('白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼');
a = 20; {横向间隔}
b = 20; {纵向间隔}
var
s: string;
x, y: Integer;
i, j: Integer;
begin
x := 20;
y := 20;
for i := 0 to Length(arr) - 1 do
begin
for j := 1 to Length(arr) do
begin
s := arr;
Screen.Canvas.TextOut(x, y, s);// 使用Screen.Canvas来绘制在整个屏幕上
x := x + Screen.Canvas.TextWidth(s) + a;
end;
x := 20;
y := y + Screen.Canvas.TextHeight(s) + b;
end;
end;
end.
龙不死 发表于 2024-1-18 13:41
在你的代码中,文字是在TForm7的Canvas上绘制的,因此它将在TForm7的客户区域上绘制文字。如果你想在屏幕上 ...
Unit7.pas(89): E2003 Undeclared identifier: 'Canvas'
Unit7.pas(89): E2010 Incompatible types: 'Integer' and 'string'
全是错误 。。。 本帖最后由 冥界3大法王 于 2024-1-18 15:24 编辑
sai609 发表于 2024-1-18 13:15
print函数
自己看,左上角的未注册字样就是用这个函数
我也要模拟实现一个! 啥意思,难道是绘制到Windows顶层,还是软件的顶层? 老版本的话可能是查找桌面句柄,然后调用TextOut输出,
新版不知道有没有提供直接操作桌面的函数,没有delphi环境,没办法运行。 flyer_2001 发表于 2024-1-19 00:42
老版本的话可能是查找桌面句柄,然后调用TextOut输出,
新版不知道有没有提供直接操作桌面的函数,没有del ...
我找本Delphi图形绘制输出的pdf
看几个入门的实例就懂了。 冥界3大法王 发表于 2024-1-19 09:02
我找本Delphi图形绘制输出的pdf
看几个入门的实例就懂了。
{:1_921:}
涉及到置前的问题,一般采用透明窗体,在透明窗体上输出的方式
页:
[1]
2