gpt4 book ai didi

delphi - 如何在不删除现有数据的情况下以新格式将数据 append 到现有剪贴板?

转载 作者:行者123 更新时间:2023-12-03 18:26:46 25 4
gpt4 key购买 nike

我需要以多种格式将数据放在剪贴板上,一种是 RTF。我正在使用的组件可以很好地处理除 RTF 之外的所有内容。如何在不删除祖先类已经放置在那里的数据的情况下 append RTF 格式数据?如果有办法,我试图避免将剪贴板逻辑从副本中的祖先复制到剪贴板例程。

最佳答案

您可以通过执行以下操作 append 到现有剪贴板数据:

  • 调用 Clipboard.Open .
  • 调用将其他数据放在剪贴板上的基类方法。
  • 调用 Clipboard.SetAsHandle , 或 SetClipboardData通过你的 RTF。
  • 调用 Clipboard.Close .

  • 只要继承的调用在您的 Open/Close 内配对你会得到想要的效果。

    这是我的意思的演示:
    procedure SetBuffer(Format: Word; const Buffer; Size: Integer);
    var
    DataPtr: Pointer;
    Data: THandle;
    begin
    Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
    try
    DataPtr := GlobalLock(Data);
    try
    Move(Buffer, DataPtr^, Size);
    Win32Check(SetClipboardData(Format, Data) <> 0);
    finally
    GlobalUnlock(Data);
    end;
    except
    GlobalFree(Data);
    raise;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Bitmap: TBitmap;
    const
    Text: string = 'foo';
    begin
    Clipboard.Open;
    try

    // imagine this next block is the base component's method to set the clipboard
    Clipboard.Open;
    try
    Bitmap := GetFormImage;
    try
    Clipboard.Assign(Bitmap);
    finally
    Bitmap.Free;
    end;
    finally
    Clipboard.Close;
    end;

    // once that is done, we can add out extra data
    SetBuffer(CF_UNICODETEXT, Text[1], ByteLength(Text));
    finally
    Clipboard.Close;
    end;
    end;

    因为我们一直锁定剪贴板,所以没有其他进程可以阻止我们。并且基本组件方法将在开始添加其文本之前清空剪贴板。

    关于delphi - 如何在不删除现有数据的情况下以新格式将数据 append 到现有剪贴板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728793/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com