Как загрузить поток TStream из файла в буфере обмена Windows в Delphi
Вопрос, который вы задали, связан с необходимостью работы с файлами в буфере обмена Windows, используя технологии Delphi. Когда вы копируете файл в буфер обмена, он сохраняется в специальном формате CF_HDROP, который позволяет идентифицировать файл как объект, готовый к перетаскиванию. Для работы с таким форматом и чтения файлов из буфера обмена, можно использовать функцию DragQueryFile.
Пример кода
uses
Classes, Clipbrd, ShellAPI;
var
hDrop: THandle;
MyStream: TMemoryStream;
Files: TStringList;
NumFiles, FileIdx: DWORD;
FileName: array[0..MAX_PATH] of Char;
I: Integer;
begin
Files := TStringList.Create;
try
Clipboard.Open;
try
if Clipboard.HasFormat(CF_HDROP) then
begin
// Получаем дескриптор, который указывает на список файлов в буфере обмена
hDrop := Clipboard.GetAsHandle(CF_HDROP);
NumFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
if NumFiles <> 0 then
begin
for FileIdx := 0 to NumFiles-1 do
begin
// Получаем имена файлов из буфера обмена
if DragQueryFile(hDrop, FileIdx, FileName, MAX_PATH) <> 0 then
Files.Add(FileName);
end;
end;
end;
finally
Clipboard.Close;
end;
for I := 0 to Files.Count-1 do
begin
MyStream := TMemoryStream.Create;
try
// Загружаем содержимое файла в поток
MyStream.LoadFromFile(Files[I]);
MyStream.Position := 0;
// Теперь можно использовать поток MyStream как нужно...
finally
MyStream.Free;
end;
end;
finally
Files.Free;
end;
end;
Важные замечания
Используйте модуль ShellAPI для работы с функциями перетаскивания файлов.
Не освобождайте дескриптор hDrop, так как буфер обмена владеет им.
Перед использованием данных из буфера обмена, убедитесь, что формат CF_HDROP присутствует.
Используя данный пример, вы сможете загрузить содержимое файла из буфера обмена в поток TMemoryStream, который затем можно использовать для чтения или записи данных в вашем приложении на Delphi.
Вопрос касается процесса загрузки потока данных из файла, который находится в буфере обмена операционной системы Windows, с использованием технологий Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.