Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   CheckListBox Items separieren (https://www.delphipraxis.net/189873-checklistbox-items-separieren.html)

Freyr77 2. Aug 2016 14:50

Delphi-Version: 10 Seattle

CheckListBox Items separieren
 
Die hoffentlich letzte Frage zu meinem Projekt..

Ich lasse einen Ordner über TFileOpenDialog auswählen, anschließend suche ich mit "GetFilesInDirectory" nach allen .dproj's in dem gewählten Ordner und speichere Sie in meiner CheckListBox ab. Alles kein Thema, die gewünschten Dateien wurden alle korrekt eingelesen und zugeordnet.

Jetzt durchläuft meine Schleife aber eine bestimmte Prozedur für jedes einzelne .dproj und speichert dieses abschließend in einem StringGrid mit ausgelesenen Datei Informationen. Deshalb bräuchte ich jedes Item der CheckListBox einzeln als String. Sonst kann das Programm das nicht verarbeiten.

Das ganze sieht so aus:

Delphi-Quellcode:
var
  lXMLOutput: string;
  lFileVersionInfo, lFileNameInfo, lProductVersionInfo: string;
  SemikolonPos: integer;
  StringPos: integer;
  iZaehler: integer;
  GefundeneDateien: string;
  Ordnerpfad: string;
  i: integer;
begin
  fVersionInfo := nil;
  with TFileOpenDialog.Create(nil) do
    try
      Options := [fDoPickFolders];
      if Execute then
        Ordnerpfad := Filename;
    finally
      Free;
    end;

  // Rekursive Dateisuche
  GetFilesInDirectory(Ordnerpfad, '*.dproj', ListBox1.Items, True);
  GefundeneDateien := ListBox1.Items.Text;

  // CheckListBox??????
  // Dateien in CheckListBox schreiben
  CheckListBox1.Items.Text := GefundeneDateien;
  CheckListBox1.SelectAll;
  // CheckListBox ausgewählte Dateien


  for i := 0 to CheckListBox1.Items.Count - 1 do
    CheckListBox1.Checked[i];

  for iZaehler := 0 to i - 1 do

  begin
    // XML-Dokument laden
    CurrentXML := NewXMLDocument;
    CurrentXML.LoadFromFile(GefundeneDateien); // Dateinamen einfügen
    CurrentXML.Active := True;

    // XML-Dokument auslesen
    GetVersionInfo(CurrentXML.DocumentElement);
    if fVersionInfo.NodeValue <> '' then
    begin
      // Kompletter VerInfo_Keys Part
      lXMLOutput := fVersionInfo.NodeValue;

      // FileVersion Stringposition, Nummer kopieren und zuweisen
      StringPos := POS('FileVersion=', lXMLOutput);
      SemikolonPos := lXMLOutput.IndexOf(';', StringPos);
      lFileVersionInfo := lXMLOutput.Substring(StringPos + 11,
        SemikolonPos - StringPos - 11);

      // InternalName Stringposition, Substring kopieren und zuweisen
      StringPos := POS('InternalName=', lXMLOutput);
      SemikolonPos := lXMLOutput.IndexOf(';', StringPos);
      lFileNameInfo := lXMLOutput.Substring(StringPos + 12,
        SemikolonPos - StringPos - 12);

      // ProductVersion Stringposition, Substring kopieren und zuweisen
      StringPos := POS('ProductVersion=', lXMLOutput);
      SemikolonPos := lXMLOutput.IndexOf(';', StringPos);
      lProductVersionInfo := lXMLOutput.Substring(StringPos + 14,
        SemikolonPos - StringPos - 14);

      // Überschriften StringGrid
      StringGrid1.Cells[0, 0] := 'Projekt';
      StringGrid1.Cells[1, 0] := 'DateiVersion';
      StringGrid1.Cells[2, 0] := 'ProduktVersion';

      // Vierte Spalte unsichtbar
      StringGrid1.ColWidths[3] := -1;

      // Eintragungen StringGrid
      StringGrid1.Cells[0, iZaehler] := lFileNameInfo;
      StringGrid1.Cells[1, iZaehler] := lFileVersionInfo;
      StringGrid1.Cells[2, iZaehler] := lProductVersionInfo;
Ich hatte schon die Idee das ganze einzeln zu Zerpflücken und dann in Variablen zu speichern. Das ist mir aber zu umständlich, weil es viele Dateien sind.

nahpets 2. Aug 2016 15:26

AW: CheckListBox Items separieren
 
Wie wäre es mit
Delphi-Quellcode:
CurrentXML.LoadFromFile(CheckListBox1.Items[i]);

anstelle von
Delphi-Quellcode:
CurrentXML.LoadFromFile(GefundeneDateien); // Dateinamen einfügen

himitsu 2. Aug 2016 15:33

AW: CheckListBox Items separieren
 
Wozu soll denn die Listbox gut sein?
Ich möchte fast wetten, dass man GetFilesInDirectory auch die CheckListBox1 geben kann.
Da jemand die Dateien eh einzeln haben wollte, wäre GefundeneDateien auch bissl nutzlos.

Man mag es nicht glauben, aber genau wie ListBox1.Items ist CheckListBox1.Items ein TStrings ... also fast sowas wie eine TStringList :stupid:

Zitat:

Delphi-Quellcode:
for i := 0 to CheckListBox1.Items.Count - 1 do
    CheckListBox1.Checked[i];

Was diese komische schleife (nicht) machen soll, bleibt mir auch schleierhaft.

Und die Methode GetVersionInfo würde ich auch umbennen, da sie nicht die Versioninfo gibt, sondern sie in eine "globale" Variable schreibt.
(hätte ja eher erwatet die gibt das als Result zurück)

PS: Wieso kann sich hier keiner für Einwas entscheiden? (IndexOf oder Pos)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz