Clipbrd delphi腐败

时间:2012-06-06 12:23:46

标签: delphi clipboard delphi-2009

当使用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

编译并执行。 开始 - >跑 然后输入(不要从这里复制!)

  

יגדכלחילדגחכי

然后粘贴你会得到

  

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

1 个答案:

答案 0 :(得分:0)

TClipboard对象传递给TBitmap.Assign()只能从剪贴板中读取,它不会向剪贴板写入任何内容,也不会以任何方式改变剪贴板的内容。所以问题不在你展示的代码中。我现在能想到的唯一可能性是,首先在剪贴板上存储位图的应用程序可能会在启用延迟渲染的情况下存储它,并且在{{1}存储现在渲染的位图时以错误的方式更新剪贴板向剪贴板询问它。