Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.027 c
6-1137220195
dreamse
2006-01-14 09:29
2006.04.30
2 сетевые карточки , UDP запрос 255,255,255,255 уходит не туда


2-1144703963
ДК
2006-04-11 01:19
2006.04.30
Delphi vs Open Office


15-1144322061
Суслик
2006-04-06 15:14
2006.04.30
XML parser


15-1144695890
Yozh_Programmer
2006-04-10 23:04
2006.04.30
Вход в сервис меню телевизора Toshiba 29JZ7TM (КАК?)


15-1144614620
Zeqfreed
2006-04-10 00:30
2006.04.30
Что почитать о поиске вхождений по маске?