По понятиям "чайников" -- "кофейники" просто ламеры...
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 thenbegin
pMem := GlobalLock(hMem);
if pMem <> nilthenbegin
StrPCopy(pMem, StrValue);
GlobalUnlock(hMem);
if OpenClipboard(0) thenbegin
EmptyClipboard;
SetClipboardData(CF_TEXT, hMem);
CloseClipboard;
endelse
GlobalFree(hMem);
endelse
GlobalFree(hMem);
end;
end;
function GetStrFromClipbrd: string;
beginif Clipboard.HasFormat(CF_TEXT) then
Result := Clipboard.AsText
elsebegin
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
Эта процедура принимает параметр stringStrValue и копирует его значение в буфер обмена.
Она выделяет память с помощью GlobalAlloc с флагами GHND и GMEM_SHARE, что означает, что память будет общей для процессов.
Если выделение памяти успешно, она блокирует память с помощью GlobalLock.
Она копирует строковое значение с помощью StrPCopy.
Она разблокировывает память с помощью GlobalUnlock.
Она открывает буфер обмена с помощью 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, чтобы упростить код. Например:
procedureStrToClipbrd(StrValue:string);beginClipboard.AsText:=StrValue;end;functionGetStrFromClipbrd:string;beginifClipboard.HasFormat(CF_TEXT)thenResult:=Clipboard.AsTextelsebeginShowMessage('There is no text in the Clipboard!');Result:='';end;end;
В этом альтернативном решении компонент TClipboard заботится о выделении и блокировке памяти для вас.
Как скопировать строку в буфер обмена и прочитать ее с помощью Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.