che.ramzes
24-12-2011, 21:43
Привет Всем. У меня вот такая проблемка не понятная. использую процедуру
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;
Сама процедура рабочая.Вызывается она так CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat');
Но у меня имена файлов заранее не извесны и сколько их тоже. Создал массив CHAR (типа string) и заполнил его именами файлов.
Вызываю проц. CopyFilesToClipboard(CHAR[1]#0CHAR[2]) и делфи ругается на #0. Если писать сразу имена 'File1.txt'#0'File2.txt' bce работает а с массивом и пробовал с переменными не работает. Может кто поможет, как она работает эта процедура.
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;
Сама процедура рабочая.Вызывается она так CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat');
Но у меня имена файлов заранее не извесны и сколько их тоже. Создал массив CHAR (типа string) и заполнил его именами файлов.
Вызываю проц. CopyFilesToClipboard(CHAR[1]#0CHAR[2]) и делфи ругается на #0. Если писать сразу имена 'File1.txt'#0'File2.txt' bce работает а с массивом и пробовал с переменными не работает. Может кто поможет, как она работает эта процедура.