Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Скопировать строку в Буфер и прочитать её

Delphi , ОС и Железо , Буфер обмена

Скопировать строку в Буфер и прочитать её

По понятиям "чайников" -- "кофейники" просто ламеры...


uses 
  ClipBrd; 

procedure StrToClipbrd(StrValue: string); 
var 
  S: string; 
  hMem: THandle; 
  pMem: PChar; 
begin 
  hMem := GlobalAlloc(GHND or GMEM_SHARE, Length(StrValue) + 1); 
  if hMem <> 0 then 
  begin 
    pMem := GlobalLock(hMem); 
    if pMem <> nil then 
    begin 
      StrPCopy(pMem, StrValue); 
      GlobalUnlock(hMem); 
      if OpenClipboard(0) then 
      begin 
        EmptyClipboard; 
        SetClipboardData(CF_TEXT, hMem); 
        CloseClipboard; 
      end 
      else 
        GlobalFree(hMem); 
    end 
    else 
      GlobalFree(hMem); 
  end; 
end; 

function GetStrFromClipbrd: string; 
begin 
  if Clipboard.HasFormat(CF_TEXT) then 
    Result := Clipboard.AsText 
  else 
  begin 
    ShowMessage('There is no text in the Clipboard!'); 
    Result := ''; 
  end; 
end; 


// write "Hallo" to the clipboard and read it back. 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  StrToClipbrd('Hallo'); 
  ShowMessage(GetStrFromClipbrd); 
end;

Это программное обеспечение на языке Delphi, которое копирует строку в буфер обмена и затем читает ее обратно из буфера обмена. Вот разбивка кода:

Процедура StrToClipbrd

Эта процедура принимает параметр string StrValue и копирует его значение в буфер обмена.

  1. Она выделяет память с помощью GlobalAlloc с флагами GHND и GMEM_SHARE, что означает, что память будет общей для процессов.
  2. Если выделение памяти успешно, она блокирует память с помощью GlobalLock.
  3. Она копирует строковое значение с помощью StrPCopy.
  4. Она разблокировывает память с помощью GlobalUnlock.
  5. Она открывает буфер обмена с помощью OpenClipboard, очищает его с помощью EmptyClipboard, устанавливает данные буфера обмена в выделенную память с помощью SetClipboardData с форматом CF_TEXT, и закрывает буфер обмена с помощью CloseClipboard.

Функция GetStrFromClipbrd

Эта функция проверяет, содержит ли буфер обмена текстовые данные в формате CF_TEXT. Если это так, она читает текст из буфера обмена с помощью AsText. Если нет, она отображает сообщение об ошибке "There is no text in the Clipboard!" и возвращает пустую строку.

Процедура Button1Click

Эта процедура вызывается при клике кнопки с надписью "Hallo". Она вызывает процедуру StrToClipbrd, чтобы записать строку "Hallo" в буфер обмена, а затем отображает сообщение об ошибке с помощью функции GetStrFromClipbrd.

Альтернативное решение

Вместо использования GlobalAlloc и GlobalLock можно использовать методы компонента TClipboard, чтобы упростить код. Например:

procedure StrToClipbrd(StrValue: string);
begin
  Clipboard.AsText := StrValue;
end;

function GetStrFromClipbrd: string;
begin
  if Clipboard.HasFormat(CF_TEXT) then
    Result := Clipboard.AsText
  else
  begin
    ShowMessage('There is no text in the Clipboard!');
    Result := '';
  end;
end;

В этом альтернативном решении компонент TClipboard заботится о выделении и блокировке памяти для вас.

Как скопировать строку в буфер обмена и прочитать ее с помощью Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Буфер обмена ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 20:02:13/0.0035290718078613/0