К списку форумов К списку вопросов
Помогите разобраться с этим кодом, плиззз
Elitte
01.08.2004 - 09:13
uses ShellApi;
procedure TForm1.Button1Click(Sender: TObject);
var
  OpStruc: TSHFileOpStruct;
  frombuf, tobuf: array [0..128] of Char;
begin
 FillChar( frombuf, Sizeof(frombuf), 0 );
 FillChar( tobuf, Sizeof(tobuf), 0 );
 StrPCopy( frombuf, 'h:\\hook\\*.*' );
 StrPCopy( tobuf, 'd:\\temp\\brief' );
 with OpStruc do begin
  Wnd:= Handle;
  wFunc:= FO_COPY;
  pFrom:= @frombuf;
  pTo:=@tobuf;
  fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
  fAnyOperationsAborted:= False;
  hNameMappings:= Nil;
  lpszProgressTitle:= Nil;
 end;
 ShFileOperation( OpStruc );
end;
Код работает прекрасно, но при этом копируется содержимое папки в другую
а в моей программе есть 2 MEMO компонента, в первом я добавляю пути, откуда скопировать,(записей может быть 10 например) а во второй, куда писать, и что же надо изменить в этом коде, чтобы он брал пути откуда писать с МЕМО 1, и писал в пути, прописанные в МЕМО 2 ????????????
Заранее благодарен!!!!
VaS
1 - 01.08.2004 - 16:58
В mFrom строки вида c:\1\*.*, в mTo - вида d:\2
.
procedure CopyFolders(const FromFolders, ToFolder: string);
var
  Op: TSHFileOpStruct;
begin
  ZeroMemory(@Op, sizeof(Op));
  with Op do
  begin
    wFunc := FO_COPY;
    pFrom := PChar(FromFolders);
    pTo := PChar(ToFolder);
    fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
   end;
  ShFileOperation(Op);
end;
.
var
  I: Integer;
  FromNames: string;
begin
  mFrom.Lines.Delimiter := #0;
  FromNames := mFrom.Lines.DelimitedText + #0#0;
  for I := 0 to mFrom.Lines.Count - 1 do
    CopyFolders(FromNames, mTo.Lines[I]);
end;
Elitte
2 - 02.08.2004 - 06:36
Спасибо!!!
код компилится, но не работает, ссылается на адресс какой то, ошибка в исполнении ЕХЕ файла
а сам код я не могу понять, я только понял что мFROm Это типа мемо 1, а Mto это мемо 2
VaS
3 - 02.08.2004 - 09:18
Цикл for исправь вот так:
.
for I := 0 to mTo.Lines.Count - 1 do
  CopyFolders(FromNames, mTo.Lines[I]);
.
Сорри.
Elitte
4 - 02.08.2004 - 10:20
Спасибо VaS за помощь
но он опять выдает то же самое сообщение
вот собственно как выглядит код, можт че не так?
//Это я так понял после Implementation идет реализация процедуры
procedure CopyFolders(const FromFolders, ToFolder: string);
var
  Op: TSHFileOpStruct;
begin
  ZeroMemory(@Op, sizeof(Op));
  with Op do
  begin
    wFunc := FO_COPY;
    pFrom := PChar(FromFolders);
    pTo := PChar(ToFolder);
    fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
   end;
  ShFileOperation(Op);
end;
//Здесь реализация процедуры заканчивается, потом в обработчике нажатия на батон :
Procedure TForm1.Button1Click(Sender:TObject);
var
  Memo1, Memo2 : TMemo; //Первый - откуда, второй - куда
  I: Integer;
  FromNames: string;
begin
  memo1.Lines.Delimiter := #0;
  FromNames := memo1.Lines.DelimitedText + #0#0;
  for I := 0 to memo2.Lines.Count - 1 do
    CopyFolders(FromNames, memo2.Lines[I]);
end;
Не работает почемуто
VaS
5 - 02.08.2004 - 10:57
:)
Локальные переменные скрыли поля класса формы :) Надо их убрать.
1. Помещаешь на форму 2 TMemo. Имена их автоматически будут Memo1 и Memo2.
2.
procedure TForm1.Button1Click(Sender:TObject);
var
  I: Integer;
  FromNames: string;
begin
  memo1.Lines.Delimiter := #0;
  FromNames := memo1.Lines.DelimitedText + #0#0;
  for I := 0 to memo2.Lines.Count - 1 do
    CopyFolders(FromNames, memo2.Lines[I]);
end;
Elitte
6 - 03.08.2004 - 07:06
VaS, Спасибо, ты помог, все работает!!!
какую литературу ты читал??? хорошо разбираешься в программинге
:-)
VaS
7 - 03.08.2004 - 08:58
Много чего читал :) Советую Тейксейра, Пачеко "Руководство разработчика Delphi6". Добавишь туда Тенцер "Delphi и технология COM" и Конопка "Разработка оригинальных компонент в Delphi". Это чисто по Делфи.

К списку вопросов на форуме Программирование

>>