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

Вниз

Код на обсуждение   Найти похожие ветки 

 
koha ©   (2007-08-10 01:55) [0]

{---------------------------- AddFilesFromDir ---------------------------------}
procedure TMainForm.AddFiles(Sender: TObject);
Var
 i,cont,conter   : Integer;
 BakLst,FilesLst :  TStrings;
 FT              : TFindThread;
 FileVerInfo     : TFileVerInfo;
 AddDir,KBNum    : String;
begin
 BakLst   := TStringList.Create;
 FilesLst := TStringList.Create;

 try
 if (sender is TAction) then begin
   if (Sender as TAction).Name = Act_AddDir.Name then begin
     if Not SelectDirectory("Выбор директории с файлами обновления", "CurDir",AddDir) then exit;
     FT:=TFindThread.Create(AddDir,"*.exe",FilesLst,Act_FindSubDir.Checked);
     while FT.FStatEnd <> true do Application.ProcessMessages;
     FT.Free;
     if FilesLst.Count = 0 then exit;
   end;
   if (Sender as TAction).Name = Act_AddFiles.Name then begin
     OpenDlg.Filter:="Exe-files *.exe|*.exe";
     if Not OpenDlg.Execute then exit;
     FilesLst.AddStrings(OpenDlg.Files);
   end;
 end;
 if (Sender is Tform) then begin
   FT:=TFindThread.Create(CurPath,"*.exe",FilesLst,Act_FindSubDir.Checked);
   while FT.FStatEnd <> true do Application.ProcessMessages;
   FT.Free;
   if FilesLst.Count = 0 then exit;
 end;

   i := FilesLst.IndexOf(ParamStr(0));
   if Not (i = -1) then FilesLst.Delete(i);

   for I := 0 to LV.items.Count -1 do BakLst.Add(LV.Items[i].Caption);
  // можно ли как-нибудь другим способом поместь содержимое колонки?
  // в TStringList


   conter := 0;

   while FilesLst.Count <> conter do begin

     // фильтруем от повторяющихся файлов
     if BakLst.IndexOf(FilesLst.Strings[conter]) <> -1 then begin
       FilesLst.Delete(conter);
       continue;
     end;

     New(FileVerInfo); // Можно ли это сделать до цикла один раз,
                             //а не каждый раз в цикле?

     if GetFileVerInfo(FilesLst.Strings[conter],FileVerInfo) then begin
       if Act_AddFilesALL.Checked then
         FileVerInfoLst.Add(FileVerInfo)
       else begin
         if HotFixFilter(FileVerInfo) then begin
           FileVerInfoLst.Add(FileVerInfo);
           mm.Lines.Add(FilesLst.Strings[conter]);
         end
         else begin
           FilesLst.Delete(conter);
           continue;
         end;
       end;
     end
     else begin
       if Act_AddFilesALL.Checked then
         FileVerInfoLst.Add(FileVerInfo)
       else begin
         FilesLst.Delete(conter);
         continue;
       end;
     end;

     NewItem:=LV.Items.Add;
     with NewItem do begin
       Caption:=FilesLst.Strings[conter];
       AddIconToListView(FilesLst.Strings[conter]); //add icons

       KBNum:="";
       if (FileVerInfo.KBArticleNumber <> "") and
          (Length(FileVerInfo.KBArticleNumber) = 6) then
          KBNum:=FileVerInfo.KBArticleNumber
       else KBNum:=GetKBArtikleFromName(FilesLst.Strings[conter]);

       If (KBNum <> "") and (Length(KBNum) = 6) then begin
         if (FindRegistry(Updates,KBNum) = true)  or //then begin
            (FindRegistry(Uninstall,KBNum) = true) then begin
           StateIndex:=0;
           SubItems.Add("Установлено"); //add status
         end else begin
           StateIndex:=1;
           SubItems.Add("Hеутановлено");
         end;
       end else begin
         StateIndex:=1;
         SubItems.Add("Нет информации");
       end;

       SubItems.Add(FileVerInfo.KBArticleNumber);   // Build Date
       SubItems.Add(FileVerInfo.FileDescription);
       SubItems.Add(FileVerInfo.ProductName);
       SubItems.Add(FileVerInfo.AppliesTo);
       SubItems.Add(FileVerInfo.SupportLink);
     end;
     Inc(conter);
   end;

 finally
   mm.Lines.Add("LV.Items.Count = "+IntToStr(LV.Items.Count));
   mm.Lines.Add("FileVerInfoLst.Count = "+IntToStr(FileVerInfoLst.Count));
   //mm.Lines.Add("FileVerInfoLst.Count = "+FilesLst.Strings[0]);
   //mm.Lines.Add("FileVerInfoLst.Count = "+FilesLst.Strings[1]);
   BakLst.Free;
   FilesLst.Free;
 end;
end;


 
Slym ©   (2007-08-10 05:11) [1]

FT:=TFindThread.Create(...);
try
    while FT.FStatEnd <> true do Application.ProcessMessages;
finally
 FT.Free;


 
Slym ©   (2007-08-10 05:14) [2]

if (FindRegistry(Updates,KBNum) = true)
===
if (FindRegistry(Updates,KBNum))


 
Slym ©   (2007-08-10 05:15) [3]

finally
  mm.Lines.Add("LV.Items.Count = "+IntToStr(LV.Items.Count));
  mm.Lines.Add("FileVerInfoLst.Count = "+IntToStr(FileVerInfoLst.Count));

finally в данном случае точно не для этого


 
MsGuns ©   (2007-08-10 08:22) [4]

Код как код. Обычный уровень новичка


 
koha ©   (2007-08-10 13:20) [5]


> Slym ©   (10.08.07 05:11) [1]

- это понял.

> Slym ©   (10.08.07 05:14) [2]
> if (FindRegistry(Updates,KBNum) = true)
> ===
> if (FindRegistry(Updates,KBNum))


в моем случае в нутри функции такая конструкция:

myfunk: boolean;
begin
 //................
end;

- это почему-то не срабатывает, как ты показываешь наверно потому, что result не проинициализирован.

в твоем случае срабатывает если соблюдается такая конструкция в нутри функции:
myfunk: boolean;
begin
  result:=false;
 //................
end;  
по другому почемуто не работает.


> Slym ©   (10.08.07 05:15) [3]


-это, так левый код при отладке нужен был, заблудился - забыл удалить.


 
Loginov Dmitry ©   (2007-08-10 20:12) [6]

> FileVerInfo     : TFileVerInfo;


Что такое TFileVerInfo? Используешь New(FileVerInfo); Значит TFileVerInfo - тип - указатель на соответствующую структуру. Тогда почему "T" а не "P"? При таком стиле в этом коде фик кто разберется, кроме его создателя.

А так обсуждать тут в общем-то нечего. Код новичка с изрядной долей каши в голове.


 
koha ©   (2007-08-10 22:02) [7]


> Loginov Dmitry ©   (10.08.07 20:12) [6]


- ты прав, я далеко не.......
но вот, что интересует: eсть указатель на структуру FileVerInfo: TFileVerInfo, который должен быть PFileVerInfo  и есть список указателей TList в который добавляется указатель на структуру. Вот вопрос: нужно ли каждый раз при добавлении в список указателя делать New(FileVerInfo);

while FilesLst.Count <> conter do
    begin
       New(FileVerInfo);
       FileVerInfoLst.Add(FileVerInfo);
       //...............  
       Inc(conter);
    end;

или можно сделать один раз  перед циклом? (кстати то же работает)

New(FileVerInfo);
while FilesLst.Count <> conter do
    begin
       FileVerInfoLst.Add(FileVerInfo);
       //...............  
       Inc(conter);
    end;


 
Loginov Dmitry ©   (2007-08-11 00:08) [8]

> Вот вопрос: нужно ли каждый раз при добавлении в список
> указателя делать New


Конечно нужно. В противном случае ты каждый раз при вызове GetFileVerInfo будешь изменять поля одной и той же структуры. Указатель FileVerInfo будет для всех элементов списка иметь одно и тоже значение, а сведения запомнятся только для самого последнего файла из FilesLst.


 
koha ©   (2007-08-11 09:25) [9]


> Loginov Dmitry ©   (11.08.07 00:08) [8]

- конечно извиняюсь за глупый вопрос.
- я почему-то думал, что метод TList.add(); умеет сам автоматом выделять память или копировать структуру. Да, лезут же такие глупости в голову.



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

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.061 c
1-1182445847
tormoz
2007-06-21 21:10
2007.09.02
Работа с "чужими" окнами... написанными на Java


2-1186480407
Ванечка
2007-08-07 13:53
2007.09.02
Программно запустить файл *.html на просмотр ?


15-1185972624
Elen
2007-08-01 16:50
2007.09.02
Работа с палитрой Корела


4-1173891446
VirEx
2007-03-14 19:57
2007.09.02
передача данных/строк из Dll приложению


8-1165148806
Alex_C
2006-12-03 15:26
2007.09.02
Как в колонках воспроизвести сигнал определенной частоты?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский