Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Внизтекстовый файл в буфер обмена Найти похожие ветки
← →
heady (2005-05-18 23:15) [0]Не подскажите рабочую процедурку? в delphiworld нашел:
Копируем файл в буфер обмена
uses
ShlObj, ClipBrd;
procedure CopyFilesToClipboard(FileList: string);
var
DropFiles: PDropFiles;
hGlobal: THandle;
iLen: Integer;
begin
iLen := Length(FileList) + 2;
FileList := FileList + #0#0;
hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
SizeOf(TDropFiles) + iLen);
if (hGlobal = 0) then raise Exception.Create("Could not allocate memory.");
begin
DropFiles := GlobalLock(hGlobal);
DropFiles^.pFiles := SizeOf(TDropFiles);
Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
GlobalUnlock(hGlobal);
Clipboard.SetAsHandle(CF_HDROP, hGlobal);
end;
end;
// Example, Beispiel:
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFilesToClipboard("C:\Bootlog.Txt"#0"C:\AutoExec.Bat");
end;
//Separate the files with a #0.
не работает :( буфер пустой даже если указывать сущ. и непустые текстовые файлы
еще(оттуда же):
Копирование большого файла в буфер обмена
Вот общее решение, которое будет работать, даже если у вас размер файла превышает 64Кб:
function _hread(FileHandle: word; BufPtr: pointer;
ByteCount: longint): longint; far;
external "KERNEL" index 349;
procedure CopyFileToClipboard(const fname: string);
var
hmem, hFile: THandle;
size: LongInt;
p: Pointer;
begin
hFile := FileOpen(fname, fmOpenRead);
try
size := FileSeek(hFile, 0, 2);
FileSeek(hfile, 0, 0);
if size > 0 then
begin
hmem := GlobalAlloc(GHND, size);
if hMem <> 0 then
begin
p := GlobalLock(hMem);
if p <> nil then
begin
_hread(hFile, p, size);
GlobalUnlock(hMem);
Clipboard.SetAsHandle(CF_TEXT, hMem);
end
else
GlobalFree(hMem);
end;
end;
finally
FileClose(hFile);
end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
fname: string[128];
begin
if OpenDialog1.Execute then
begin
fname := OpenDialog1.Filename;
CopyFileToClipboard(fname);
end;
end;
← →
heady (2005-05-18 23:16) [1]последняя выдает ошибку при выполнении "KERNEL..."
← →
heady (2005-05-18 23:17) [2]пусть даже файл содержит только английские буквы. Зарание благодарен.
← →
Andy BitOff © (2005-05-18 23:22) [3]Попробуй так.
procedure TForm1.Button2Click(Sender: TObject);
var
s:TStringList;
begin
s:=TStringList.Create;
try
s.LoadFromFile(FileName);
Clipboard.AsText:=s.Text;
finally
s.Free;
end;
end;
← →
heady (2005-05-19 09:57) [4]Работает! Andy BitOff - спасибо и респект!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c