Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
Delphi XE2 Professional
|
Re: Problem mit Records in Class bei Abfrage der Class
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! <<
|
|
Zitat
|