0

使用本机Clipbrd时,有人知道会发生文本损坏吗?

访问位图后

    bitmap.Assign(Clipboard);

剪贴板中的文本似乎已损坏。使用英语它可以正常工作,但是它会变成奇怪的字符,例如 ã

这是一个“开放的错误”吗?

有没有办法处理这个问题并将剪贴板恢复到正常操作而无需重新启动计算机?

编码

Clipboard.Open;
bitmap.Assign(Clipboard);
Clipboard.Close;

结果相同。

我的猜测是它会通过编码到达某个地方。

他们对剪贴板的破坏是为了软件之外的用户体验。剪贴板无法用于非英语语言。

任何图片提取后,即使关闭Delphi或软件,剪贴板也无法传输非英文。

我正在测试:

大日本帝国</p>

复制粘贴结果:

?????

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
  • 编译并执行。
  • 开始→运行
  • 然后输入(不要从这里复制!)

雅加达

然后粘贴回来,你会得到

éâãëìçéìãâçëé

4

1 回答 1

0

TClipboard将对象传递给TBitmap.Assign()只会从剪贴板中读取。它不会向剪贴板写入任何内容或以任何方式更改剪贴板的内容。

所以问题不在于您显示的代码。我现在能想到的唯一可能性是,无论哪个应用程序首先将位图存储在剪贴板上,都可能在启用延迟渲染的情况下存储它,并且当TBitmap.Assigns()询问时存储现在渲染的位图时,它会以错误的方式更新剪贴板剪贴板。

于 2012-06-06T19:55:16.067 回答