0

我有一个带有日历的表格。单击日历时,他们将变量设置CurDateSel为日历上选择的日期。

我有一个常量数组(周),其中存储了Monday[Index 0] 到Sunday[Index 6] 的值。

我也有一个StringGrid过去一周中的几天跨越网格顶部,从星期日到星期一,但是,我现在已将其更改为将网格的第一列显示为CurDateSel日期(Now当表格开始)和以下网格列来存储所选日期之后的日期。

例如,如果选择了星期六:

Saturday|Sunday|Monday|Tuesday|Wednesday|Thursday|Friday  

然后我有一个过程,它遍历存储的预订列表,并将具有相应日期和日期的预订添加到网格中。例如,如果预订是在 23 日星期六下午 2 点进行的,则程序将在 y 轴上转到下午 2 点,然后转到轴上的第 5 列,因为这对应于星期六,在我的数组 WEEK 中。

但是,由于我的列现在根据当天更改,因此存储的预订值不会转到相应的日期,而是转到通常存储日期的列,如果这些列从星期一开始并在星期日结束。

我决定创建一个新数组来存储一周的值,其中一周的开始是当天,一周的结束是当天 + 6 天。我称这个数组SelDayArray

例如,如果是星期六,则此数组将从 开始Index[0] = Saturday并以 . 结尾Index[6] = Friday

我试图编写代码来填充第二个数组,但是我似乎无法正确填充它。

procedure ReturnUpdatedDay;  
 var  
  i, x, p, CurDayNo: Integer;  
begin  
  i := 0;  
  CurDayNo := ReturnDayCell(FormatDateTime('dddd', CurDateSel));  
  repeat  
    SelDayArray[i] := Week[CurDayNo+i];  
    Inc(i);  
  until (CurDayNo + i) = 7;  
  Dec(i);  
  p := i;  
  for x := 0 to (CurDayNo-p) do  
    begin  
      Inc(i);  
      SelDayArray[i] := Week[x];  
    end;
end;

My ReturnDayCellFunctionDayNo根据数组的固定常量数组返回WEEK。因此,如果选择星期六作为当前日期,该过程将返回5CurDayNo并且= 5

因此,我的ReturnUpdatedDay程序应该将 my SelDayArrayto的值设置TheCurrentDay [Index 0]TheCurrentDay+6 [Index 6]

这适用于“星期六”这一天。当我将列表打印到备忘录中时,我会收到以下值:周六、周日、周一……周五。

但是,当我在星期六前几天尝试时,我要么收到访问冲突错误,要么列表的最后两天没有存储/打印。当我选择星期日时,我收到访问冲突错误。

请有人帮我看看我做错了什么。对于任何拼写错误或令人困惑的信息,我们深表歉意。谢谢。

4

1 回答 1

2

mod运算符允许您以循环方式访问周向量,在第 6 个元素之后回退到 0。

将您的代码更改为:

procedure ReturnUpdatedDay;  
 var  
  I, CurDayNo: Integer;  
begin  
  CurDayNo := ReturnDayCell(FormatDateTime('dddd', CurDateSel));  
  for I := 0 to 6 do
    SelDayArray[I] := Week[(CurDayNo + I) mod 7];  
end;
于 2013-02-19T17:51:12.213 回答