Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

текстовый файл в буфер обмена   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
1-1116582026
mnx
2005-05-20 13:40
2005.06.06
Косвенная команда


1-1116605397
Mr-jack
2005-05-20 20:09
2005.06.06
координаты клика по форме...


1-1116787970
Volume
2005-05-22 22:52
2005.06.06
Проверка содержимого дискеты


1-1116685849
PIF
2005-05-21 18:30
2005.06.06
Запись в res файл


1-1116423009
lehich
2005-05-18 17:30
2005.06.06
разбить содержимое StringList на строки