Текущий архив: 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