Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Problem mit Records in Class bei Abfrage der Class

  Alt 7. Sep 2008, 12:19
Hier die komplette Procedure die in die Tobjectlist schreibt:
Delphi-Quellcode:
procedure TMaskForm.State_initialisieren;
var
  State_Dateiliste : TStringList;
  Valuesliste : TStringList;
  ListeButton : TStringList;

  State_Ini : TIniFile;


  Dummy_StateClass : TStateClass;
  S_Name : String;
  S : String;
  i_Position : Integer;
  i_Length : Integer;
  i : Integer;
  j : Integer;
  k : Integer;
  l : Integer;

begin
  //State-Dateiliste erzeugen
  State_Dateiliste := TStringList.Create;

  //Liste der State-Zustände erzeugen
  Valuesliste := TStringList.Create;

  //Button-Liste erzeugen
  ListeButton := TStringList.Create;

  try
    //Zustände
    GetFilesInDirectory(Masken_Ordner, '*.sta', State_Dateiliste);

    for i := 0 to Pred(State_Dateiliste.Count) do
      begin
        //Ini-Datei des States erzeugen
        State_Ini := TIniFile.Create(State_Dateiliste.Strings[i]);

        //Dummy_StateClass pro State erzeugen
        Dummy_StateClass := TStateClass.Create;

        try
          with State_Ini do
            begin
              //Namen des Zustandes auslesen
              S_Name := ReadString('State', 'Name', '');

              If Pos(New_State, S_Name) = 1 then
                begin
                  //Splash-Screen updaten
                  SplashScreenForm.InfoText := Format('State: "%s" wird initialisiert...', [S_Name]);

                  //kurze Wartezeit (0.25 sek)
                  Delay(250);

                  //Values für den Zustand auslesen
                  ReadSectionValues('State', Valuesliste);

                  with Dummy_StateClass do
                    begin
                      //Grunddaten schreiben
                      Name := S_Name;
                      Mask := Valuesliste.Values['Mask'];
                      Previous := Valuesliste.Values['Previous'];
                      Calc := Valuesliste.Values['Calc'];
                      Section := StrToIntDef(Valuesliste.Values['Section'], 0);

                      //horizontale Buttons in Klasse speichern
                      ReadSectionValues('Horz_Button', Valuesliste);

                      //Größe der des Arrays der horizontalen Buttons setzen
                      SetLength(Horz_Buttons, Anzahl_Horz_Buttons_max);

                      //Größe der des Arrays der vertikalen Buttons setzen
                      SetLength(Vert_Buttons, Anzahl_Vert_Buttons_max);

                      //Namen leeren = Position leer
                      for j := low(Horz_Buttons) to high(Horz_Buttons) do
                        Horz_Buttons[j].Name := '';

                      for j := 0 to Pred(Valuesliste.Count) do
                        begin
                          //Liste der einzelnen Properties der horizontalen Buttons
                          //auslesen (innerhalb von {})
                          S := Valuesliste.ValueFromIndex[j];

                          //Liste der Properties des einzelnen Button erstellen
                          Make_List(ListeButton, S);

                          //eingestellte Position und Position des Buttons auslesen
                          i_Position := StrToIntDef(ListeButton.Values['Position'], 0);
                          i_Length := StrToIntDef(ListeButton.Values['Length'], 0);


                          //Wenn Position oder Länge = 0 ist, Schleife weiter
                          //laufen lassen
                          If (i_Position = 0) or (i_Length = 0) then
                            continue;

                          //nicht mehr leer? - dann Schleife weiter laufen lassen
                          If Horz_Buttons[i_Position].Name <> 'then
                            continue;

                          //Ist die Position + die Länge des Buttons größer
                          //als die maximale Anzahl Buttons pro Seite, dann
                          //Schleife weiter laufen lassen
                          l := i_Position div Anzahl_Horz_Buttons;
                          If i_Length > 1 then
                            If (i_Position + i_Length) > (Succ(l) * Anzahl_Horz_Buttons) then
                              continue;

                          with Horz_Buttons[i_Position] do
                            begin
                              Bitmap := ListeButton.Values['Bitmap'];
                              Text := ListeButton.Values['Text'];
                              ID := ListeButton.Values['ID'];
                              Kind := StrToIntDef(ListeButton.Values['Kind'], 0);
                              Length := i_Length;
                              Font := ListeButton.Values['Font'];
                              Active := StrToBoolDef(ListeButton.Values['Font'], false);
                            end;

                          //Wenn die Länge des Buttons länger ist als 1
                          //dann den Nachbar-Button mit dem Namen des ersten
                          //Buttons beschreiben
                          If i_Length > 1 then
                            for k := i_Position to (i_Position + i_Length) do
                              Horz_Buttons[k].Name := Horz_Buttons[i_Position].Name;
                        end;

                      //vertikale Buttons in Klasse speichern
                      ReadSectionValues('Vert_Button', Valuesliste);

                      for j := 0 to Pred(Valuesliste.Count) do
                        begin
                          //Liste der einzelnen Properties der vertikalen Buttons
                          //auslesen (innerhalb von {})
                          S := Valuesliste.ValueFromIndex[j];

                          //Liste der Properties des einzelnen Button erstellen
                          Make_List(ListeButton, S);

                          //Properties in Array schreiben (vertikale Buttons)
                          for k := low(Vert_Buttons) to high(Vert_Buttons) do
                            begin
                              Vert_Buttons[k].Bitmap := ListeButton.Values['Bitmap'];
                              Vert_Buttons[k].Active := StrToBoolDef(ListeButton.Values['Font'], false);
                            end;
                        end;
                    end;
                end;
            end;
        //
        Liste_State.Add(Dummy_StateClass);
        finally
          //Ini-Datei löschen und freigeben
          FreeAndNil(State_Ini);
        end;
      end;
    finally
      //StringListen löschen und freigeben
      FreeAndNil(Valuesliste);
      FreeAndNil(State_Dateiliste);
      FreeAndNil(ListeButton);
    end;
end;
Es ist eigentlich alles kommentiert.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat