Registriert seit: 23. Apr 2009
137 Beiträge
Delphi 2005 Personal
|
Re: Verrückt...Func-Ergebnisse werden durch Komponenten fals
5. Nov 2009, 13:41
Zitat von Uwe Raabe:
Zitat von Codix32:
Zitat von Uwe Raabe:
Schau mal auf diese Zeile:
TagArray[i].Werktag:=Tagarray[i-1].Werktag + Weekend(TagArray,i); // Zählt die Werktage (var Byte)
Für i = 0 greifst du knapp vor das Array! Range-Check einschalten, bitte!
Ja, hm, ich kriege es nicht anders hin, Uwe. Dabei ist 'i' sogar eine Variable vom Typ Word und die geht doch eigentlich von 0 bis +... aber nicht, wie bei Integer -3-2-1 0 1 2 3.
Aber auch wenn ich 'i' als Integervariable declariere, ist der Fehler da.
Das hat mit dem Typ von i gar nichts zu tun. Tagarray[i-1] liefert für i=0 halt irgendetwas unbrauchbares, da es Tagarray[-1] gar nicht gibt. Ein eingeschalteter Range-Check (siehe Compiler Optionen) hätte dir das gleich gesagt.
Lösung:
Delphi-Quellcode:
if I = 0 then
TagArray[i].Werktag := Weekend(TagArray,i)
else
TagArray[i].Werktag := Tagarray[i-1].Werktag + Weekend(TagArray,i); // Zählt die Werktage (var Byte)
Danke Dir Uwe,
habe schon früher mal bemerkt, daß bestimmte Variablen, die nicht auf null gesetzt wurden, merkwürdige Werte ausgegeben haben.
Ich habe das Dingens hier so gelöst:
Delphi-Quellcode:
procedure TForm1.Run(Datum:TDateTime);
var
i,idx: byte;
tg:integer;
begin //<-proc
tg:=TageinMonat(datum);
Form1.Caption:=NamendesMonats(Now)+' '+inttostr(CurrentYear);
Label1.Caption:=' Der Monat hat '+inttostr(tg)+' Tage';
idx:=0;
FTArray:=GetHolidayTable(YearOf(Datum));
setlength(TagArray,tg);
for i:= 0 to tg-1 do
begin //<-for
inc(idx);
TagArray[i].TNum:=i+1;
TagArray[i].abwBegin:= '';
TagArray[i].abwEnde:= '';
TagArray[0].Werktag:= 0; //<- Für mich immer noch unlogisch, da '0' größer ist als '-1'
//<- aber jetzt funktioniert jetzt
if LblFeiertag(i+1,monthOf(Datum),FTArray)<>'' then...
...
...
end;
|
|
Zitat
|