2012-06-06 64 views
0

當使用單位Clipbrd任何人都知道發生文字腐敗?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

您是否試過Clipboard.Clear;或Clipboard.Open的組合;/Clipboard.Close; ? – ertx

+0

如果用戶想使用剪貼板供自己使用,第一次他得到一個〜然後他只得到?文本有一個不清楚的轉變。 – none

+4

顯示允許複製問題的完整程序和說明。否則,這是一個沒有問題的問題。 –

回答

0

TClipboard對象傳遞給TBitmap.Assign()將只能從剪貼板讀取,不會向剪貼板寫任何內容或以任何方式改變剪貼板的內容。所以這個問題不在你展示的代碼中。我現在唯一可以想到的是,無論哪個應用程序首先將剪貼板上的位圖存儲起來,都可能在啓用延遲渲染的情況下存儲它,並且在存儲現在渲染的位圖時以錯誤的方式更新剪貼板,TBitmap.Assigns()詢問它的剪貼板。

+0

位圖與打印屏幕一起存儲。你是否嘗試重現該錯誤? – none