![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
текстовый файл в буфер обмена [D7, WinXP]
heady © (2005-05-18 23:15:00)Не подскажите рабочую процедурку? в 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-19 09:57:00) [1]Работает! Andy BitOff - спасибо и респект!!!
Andy BitOff (2005-05-18 23:22:00) [2]Попробуй так.
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-18 23:17:00) [3]пусть даже файл содержит только английские буквы. Зарание благодарен.
heady (2005-05-18 23:16:00) [4]последняя выдает ошибку при выполнении "KERNEL..."