用Canvas实现打印(100分)

  • 主题发起人 主题发起人 雷腾铭
  • 开始时间 开始时间

雷腾铭

Unregistered / Unconfirmed
GUEST, unregistred user!
在编程,我新做了一个Qrprint控件,需要打印Unicode的字符
在使用qrprint.canvas.textout时,提示
“Canvas does not Allow drawing",不得其中缘故。
求大虾帮个忙。谢谢
 
Qrprint3根本就没有Canvas的方法。当然会报错。
 
qrprint是什么东西?
 
打印其它字符没有问题吗?
你的控件从什么继承而来?
把问题说清楚!
 
恐怕得看看源码才能知道具体错在哪,
不过分析其可能性,
看看TCanvas.TextOut的实现:
procedure TCanvas.TextOut(X, Y: Integer; const Text: String);
begin
Changing;
RequiredState([csHandleValid, csFontValid, csBrushValid]);
if CanvasOrientation = coRightToLeft then Inc(X, TextWidth(Text) + 1);
Windows.ExtTextOut(FHandle, X, Y, FTextFlags, nil, PChar(Text),
Length(Text), nil);
MoveTo(X + TextWidth(Text), Y);
Changed;
end;
再看RequiredState:
procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
NeededState: TCanvasState;
begin
NeededState := ReqState - State;
if NeededState <> [] then
begin
if csHandleValid in NeededState then
begin
CreateHandle;
if FHandle = 0 then
raise EInvalidOperation.CreateRes(@SNoCanvasHandle);
end;
......
end;
end;
再看SNoCanvasHandle:
SNoCanvasHandle = 'Canvas does not allow drawing';
呵呵,
应该就是它了。
估计可能就是因为Canvas的句柄被提前释放或出了其它什么意外。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
1K
import
I
后退
顶部