Ich kann mir gerade nicht helfen, ob (was mit Sicherheit der Fall sein wird) ich eine Großen Denkfehler habe, oder ob es einfach nur an dem Rechner liegt, mit dem Ich Programmierer, wobei Letzteres würde ich schon deshalb ausschließen, da die Zeile, auf welche ich mich im folgenden Beziehe ja ausgeführt wird.

Folgender Sachverhalt Steht zur Aussage/Tatsache
in einer Unit, Speichere ich eine TStringlist auf folgender Art.
Code: Alles auswählen
procedure TEinnahme.SetItem;
var
a, d, m, Einnahme : byte;
s : string;
begin
a := 0;
if PConst.FFilename <> '' then begin
// Daten speichern
if FileExists(PConst.FFilename) then DeleteFile(PConst.FFilename);
with TIniFile.Create(PConst.FFilename) do try
for m := 1 to 12 do
for d := 1 to 31 do
for _einnahme := Low(Items) to High(Items) do
if Items[_einnahme, d, m].Eingenommen then begin
Einnahme := _Einnahme;
s := Format('%.2d-%.2d; %.2d. Einnahme', [d, m, _einnahme+1]);
WriteBool(s, 'Eingenommen', Items[_einnahme][d, m].Eingenommen);
WriteString(s, 'Schlagwort', Items[_einnahme][d, m].Schlagwort);
WriteTime(s, 'Zeit der Einnahme', Items[_einnahme][d, m].Time);
WriteString(s, 'Stärke', Items[_einnahme][d, m].Day_Info);
WriteString(s, 'Schmerzen', Items[_einnahme][d, m].Schmerz);
WriteString(s, 'Medikament', Items[_einnahme][d, m].Medikament);
WriteFloat(s, 'Dosis', Items[_einnahme][d, m].Dosis);
WriteFloat(s, 'Menge an ' + Items[_einnahme][d, m].Medikament, Items[_einnahme][d, m].Menge);
WRiteFloat(s, 'Größe der Einnahme', Items[_einnahme][d, m].Tablette);
for a := 0 to (Items[_einnahme][d, m].Bemerkung.Count - 1) do
if Items[_einnahme][d, m].Bemerkung[a] <> '' then
WriteString(s, 'Bemerkung'+inttostr(a+1), Items[_einnahme][d, m].Bemerkung[a]);
WriteString(s, 'Last', IntToStr(a));
end;
finally
Free;
_Einnahme := Einnahme;
end;
end;
end;
Wenn ich hingegen die Zeile for a := 0 to (Items[_einnahme][d, m].Bemerkung.Count - 1) do in einer anderen Unit 1:1 verwende und Lediglich die Array-Variablen bzw die Zählvariable umbenenne (Was ja nicht der Grund sein sollte/kann/darf)
Code: Alles auswählen
Procedure auszug
with Control_Edit.memo1.Lines do begin
Add(IntToStr(_einnahme + 1) + '. Einnahme:');
Add('Schlagwort: ' + Items[_einnahme][xy.x, xy.y].Schlagwort);
Add('Stärke: ' + Items[_einnahme][xy.x, xy.y].Day_Info);
Add('Schmerzen: ' + Items[_einnahme][xy.x, xy.y].Schmerz);
Add('Medikament: ' + Items[_einnahme][xy.x, xy.y].Medikament);
Add('Dosis: ' + FloatToStr(Items[_einnahme][xy.x, xy.y].Dosis, DefaultFormatSettings));
Add('Zeit der Einnahme: ' + TimeToStr(Items[_einnahme][xy.x, xy.y].Time, DefaultFormatSettings));
for b := 0 to (Items[_einnahme][xy.x, xy.y].Bemerkung.Count - 1) do
Add('Bemerkung Zeile' + IntToStr(b + 1) + ': ' + Items[_einnahme][xy.x, xy.y].Bemerkung[b]);
end;


Einzig durch eine Änderung der Schleife durch AddStrings(Day.Memo1.Lines); konnte ich dieses Problem umgehen.
Wie ich nun aber auf die Vermutung komme, das das ein Problem mit den Rechner sein Könnte?
Der Procedure Auszug wurde auf meinem alten Ubuntu 18.04 Rechner (nun Debian 12) geschrieben und läuft OHNE Störung auch auf einer Windows - Maschine.
Wenn ich dieses Programm nun aber auf meinem Windows - Testrechner starte und die Schleife durchlaufen soll, wird diese einfach übersprungen.
Finde ich auch etwas Merkwürdig, das ich auf Windows Lazarus 3.99 laufen habe und auf Debian 3.0.
Beide Maschinen wurden mit fpcdeluxe V2.4.0 mit der OptionStable installiert