Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Пожалуйста, помогите организовать цикл!   Найти похожие ветки 

 
Pretender ©   (2006-04-13 15:13) [40]


> Даю 98%, что туда занеслась точка.

Нет, просто пустое место.

Anatoly Podgoretsky

Пошёл искать.


 
Pretender ©   (2006-04-13 16:06) [41]

Anatoly Podgoretsky
Объясните пожалуйста, как это работает:

procedure ScanDir(StartDir: string; Mask:string; List:TStrings);
var
 SearchRec : TSearchRec;
begin
 if Mask = "" then Mask := "popoln*.part*.r*"; //ну это параметр маски файла
 if StartDir[Length(StartDir)] <> "\" then StartDir := StartDir + "\"; // это        
даёт корневой каталог, хотя я не понял что даёт StartDir[число]

 if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then //если нет
                                                  найденных файлов, то запустить поиск ?
 begin
   repeat
     Application.ProcessMessages;    
     if (SearchRec.Attr and faDirectory) <> faDirectory then // ?
       List.Add(StartDir + SearchRec.Name)
     else if (SearchRec.Name <> "..") and (SearchRec.Name <> ".") then begin
       List.Add(StartDir + SearchRec.Name + "\"); //почему тут \
       ScanDir(StartDir + SearchRec.Name + "\",Mask,List); //тут опять эта функция вызывается?
     end;
   until FindNext(SearchRec) <> 0;
   FindClose(SearchRec);
 end;

Вообщем, как это работает?
end;


 
Anatoly Podgoretsky ©   (2006-04-13 16:16) [42]

Это может работать, а может не работать, а в FAQ есть стопроцентно рабочий вариант от Юрия Зотова.


 
Pretender ©   (2006-04-13 16:22) [43]


> Anatoly Podgoretsky

Да оно-то работает! :) Как раз от Ю.Зотова. Только я не понимаю принцип, вот и всё. Поэтому прошу объяснить. если не трудно.


 
Pretender ©   (2006-04-13 16:25) [44]

Ой. Не Зотова, а Леонида Трояновского.


 
Anatoly Podgoretsky ©   (2006-04-13 16:37) [45]

Используй Зотова


 
Pretender ©   (2006-04-13 16:42) [46]

Пардон, почему? Работает же. В том виде, в котором я привёл. Я потом делаю n:=ListBox1.Items.Count; и, соответственно, по количеству итемов генерирую соответствующее количество писем. Я просто прошу объяснить как это работает (оно работает, но хочется до конца разобраться).


 
Anatoly Podgoretsky ©   (2006-04-13 16:50) [47]

Работает, но не во всех случаях.
А объяснять что, там все понятно, а что тебе не понятно ты не говоришь.
Вернись к предметному разговору и тебе расскажут.


 
Pretender ©   (2006-04-13 18:49) [48]

Что не понятно я в комментах написал со знаком "?". А на сайте Вашем действительно много полезной информации, потавлю ночью кое-что на закачку.


 
Anatoly Podgoretsky ©   (2006-04-13 22:13) [49]

Это рекурсивный поиск. Рекурсия это такая штука, когда из себя вызываешь себя.


 
Pretender ©   (2006-04-14 10:26) [50]

Странно, выявилась еще одна проблема: при первом нажатии на кнопку архив пакуется частями (свойство CheckBox1.Checked=True), формируется необходимое количество писем; а если сделать CheckBox1.Checked=False (т.е. снять флажок - соответствует одному архиву) и нажать второй раз, то ничего не происходит - мелькает окно архиватора, а в n заносится значение 0. Тоже происходит при CheckBox1.Checked=True если удалить архивный файл(ы). В чём проблема?

procedure TForm1.Button1Click(Sender: TObject);

var i,n,k: integer;
   St1,St2: String;
   mail: TStringList;
   Cfg: TIniFile;
   //SR: TSearchRec;

begin
 Cfg:=TIniFile.Create(ExtractFilePath(Application.Exename) + "sm.ini");
 if RadioButton1.Checked=True then st1:=Cfg.ReadString("Config","Addr1","") else
 if RadioButton2.Checked=True then st1:=Cfg.ReadString("Config","Addr2","");
 st2:=Cfg.ReadString("Config","Path","");
 Cfg.Free;
 ShellExecute(Application.MainForm.Handle,nil,Pchar("rar.exe"),"e -y *.rar",nil,SW_ShowMaximized);
 Sleep(1000);
 if CheckBox1.Checked=True then
 ShellExecute(Application.MainForm.Handle,nil,Pchar("rar.exe"),"m -y -m5 -v1000 -ag0M0A popoln *.dbf",nil,SW_ShowMaximized);
 if CheckBox1.Checked=False then
 ShellExecute(Application.MainForm.Handle,nil,Pchar("rar.exe"),"m -y -m5 -ag0M0A popoln *.dbf",nil,SW_ShowMaximized);
 ListBox1.Items.Clear;
 if CheckBox1.Checked=True then ScanDir1(st2,"",ListBox1.Items)
 else
 ScanDir2(st2,"",ListBox1.Items);

 n:=ListBox1.Items.Count;
 label3.caption:=inttostr(n);

 for i:=1 to n do begin
   mail := TStringList.Create;
 try
   mail.values["to"] := st1;
   mail.values["subject"] := "Пополнение (часть " + IntTostr(i) + " из " + IntTostr(n) + ")";
   mail.values["body"] := "Test";
   mail.values["attachment0"] := st2 + "\test.txt";
   sendEMail(Application.Handle, mail);

 finally

   mail.Free;

   for k:=n downto 1 do Memo1.Lines.Insert(0,"Сформировано письмо № " + IntTostr(k));

 end;

end;


 
Жуков Олег   (2006-04-14 10:46) [51]

Ничего не понял, но ShellExecute+Sleep тут - потенциальный источник багов. Вместо них CreateProcess+WaitForSingleObject.


 
Pretender ©   (2006-04-14 11:19) [52]

Сделал CreateProcess(Pchar("rar.exe"),"e -y *.rar","");, а отладчик ругается Incompatible types: "String" and "PSecurityAttributes"? Это на какой параметр - на первые два?


 
Virgo_Style ©   (2006-04-14 13:35) [53]

Pretender ©   (14.04.06 11:19) [52]

Класс. 5 баллов. F1 читайте, если нету - пойдите и плюньте тому, у кого купили, если языка не знаете - учите.


 
Pretender ©   (2006-04-14 14:17) [54]

Вот что напсано по поводу этого по F1:

Delphi syntax:

procedure CreateProcess(const ExeName, Args: string; const RemoteHost: string = "");

Description

CreateProcess starts a process for debugging.

The ExeName parameter is the path to the executable file to run.

The Args parameter is the command line to pass to the executable. It can be an empty string if there are no arguments.

The RemoteHost parameter is the name of the host where the process should run. The empty string means to use the local host.

The process is created and initially stopped at the main module’s entry point. After the debugger notifier receives the ProcessCreated notification, your wizard can leave the process in its stopped state or run the process.

И всё. Про WaitForSingleObject вообще ничего нет.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.01 c
15-1144599489
Yanis
2006-04-09 20:18
2006.04.30
Опять...


15-1144400144
McSimm
2006-04-07 12:55
2006.04.30
Кстати, может кому-то интересно все-таки решить кто не знает.


2-1144209485
de_ICER-T44
2006-04-05 07:58
2006.04.30
Даты в базах DBF


2-1144951770
mobwar
2006-04-13 22:09
2006.04.30
Проблема кодировки после Copy Paste


15-1144226986
Kolan
2006-04-05 12:49
2006.04.30
Получение и сохранение данных на большом промежутке времени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский