当使用Clipbrd单位时,任何人都知道发生了文本损坏吗?
访问位图后
bitmap.Assign(Clipboard);
剪贴板中的文字似乎已损坏。英语它工作正常,但它转移到奇怪的字符,如
ã
你知道一个“开放的bug”吗?
您是否了解如何处理此问题并将剪贴板恢复正常运行而无需重新启动计算机?
更新: 代码
Clipboard.Open;
bitmap.Assign(Clipboard);
Clipboard.Close;
结果相同。 我猜到了编码的某个地方。
UPDATE2: 剪贴板的损坏是用于软件之外的用户体验。剪贴板不适用于非英语语言。 在任何提取图片之后,即使在Delphi关闭或软件之后,剪贴板也无法传输非英语。
测试:
大日本帝国
复制并粘贴结果:
?????
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,Clipbrd, StdCtrls;
type
TForm4 = class(TForm)
img1: TImage;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.btn1Click(Sender: TObject);
var
bitmap : TBitmap;
begin
bitmap := TBitmap.Create;
bitmap.Assign(Clipboard);
img1.picture.Assign(bitmap);
FreeAndNil(bitmap);
end;
end.
dfm:
object Form4: TForm4
Left = 0
Top = 0
Caption = 'Form4'
ClientHeight = 282
ClientWidth = 418
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object img1: TImage
Left = 168
Top = 64
Width = 105
Height = 105
end
object btn1: TButton
Left = 184
Top = 232
Width = 75
Height = 25
Caption = 'btn1'
TabOrder = 0
OnClick = btn1Click
end
end
编译并执行。 开始 - >跑 然后输入(不要从这里复制!)
יגדכלחילדגחכי
然后粘贴你会得到
éâãëìçéìãâçëé
答案 0 :(得分:0)
将TClipboard
对象传递给TBitmap.Assign()
只能从剪贴板中读取,它不会向剪贴板写入任何内容,也不会以任何方式改变剪贴板的内容。所以问题不在你展示的代码中。我现在能想到的唯一可能性是,首先在剪贴板上存储位图的应用程序可能会在启用延迟渲染的情况下存储它,并且在{{1}存储现在渲染的位图时以错误的方式更新剪贴板向剪贴板询问它。