Главная страница
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.037 c
14-1116271689
dazfx
2005-05-16 23:28
2005.06.06
Программа для сканирования сети


14-1116328179
wicked
2005-05-17 15:09
2005.06.06
почитать........


14-1116589607
WOLFphantom
2005-05-20 15:46
2005.06.06
DerectX и OpenGL в Delphi


4-1113804320
Roadstar
2005-04-18 10:05
2005.06.06
S.M.A.R.T.


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