Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] проблема в #0 в CopyFilesToClipboard (http://forum.oszone.net/showthread.php?t=223702)

che.ramzes 24-12-2011 21:43 1821632

проблема в #0 в CopyFilesToClipboard
 
Привет Всем. У меня вот такая проблемка не понятная. использую процедуру
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 работает а с массивом и пробовал с переменными не работает. Может кто поможет, как она работает эта процедура.

BlackEric 25-12-2011 14:42 1821994

Версия Delphi?
И что значит не работает?

Покажи описание TDropFiles.
А вообще в таких случаях вызывают процедуру с рабочими параметрами и идут дебаггером смотря где что нужно.
А потом по этим данным смотришь что тебе нужно подать на вход.

Если я правильно понял по коду, то тебе нужно передать в функцию строку содержащую имена файлов разделенные #0.
Т.е. вызываешь с константой, ставишь бряк на begin функции и смотришь что тебе пришло.

Потом сам сформируй такую же строку.

che.ramzes 25-12-2011 17:51 1822142

Версия делфи 7,0
Вызываю вот так к примеру :
procedure TForm1.Button8Click(Sender: TObject);
begin
CopyFilesToClipboard(CHAR[1]#0CHAR[2]); ругается на эту строку, курсор стоит после #0
end;
Ошибка- Missing operator or semicolon
(массив естественно прописан в var)
если так:
procedure TForm1.Button8Click(Sender: TObject);
begin
CopyFilesToClipboard('File1.txt'#0'File2.txt' );
end;
Все работает, принимает имена а если имена возвращает переменная, массив или функция то уже не хочет. Если так CopyFilesToClipboard(CHAR[1]); - одна переменная или обект с массива то тоже работает
Как передать несколько имен ???
описание TDropFiles: Я не очень то еще опытный, с clipboard сталкиваюсь в первые

BlackEric 25-12-2011 18:03 1822150

CHAR[1] + #0 + CHAR[2] не взлетит?

CHAR[1] - как это объявлено?

che.ramzes 25-12-2011 22:10 1822349

Цитата:

Цитата BlackEric
CHAR[1] + #0 + CHAR[2] не взлетит? »

Сработала !!! ура Спасибо BlackEric, все перепробЫвал а с + как то недопер.
Тему можно считать закрытой. Спасибо oszony

Drongo 25-12-2011 22:52 1822370

che.ramzes, Для изучения функционала форума, пожалуйста, отредактируйте ваши сообщения, оформив код тегом [code][/code]. Ну и пометьте тему решённой самостоятельно. :)


Время: 15:54.

Время: 15:54.
© OSzone.net 2001-