Einzelnen Beitrag anzeigen

Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Verrückt...Func-Ergebnisse werden durch Komponenten fals

  Alt 5. Nov 2009, 12: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;
  Mit Zitat antworten Zitat