0

カレンダーが入った形があります。カレンダーをクリックすると、カレンダーでCurDateSel選択した日付に変数が設定されます。

Monday[インデックス0]からSunday[インデックス6] までの値が格納されている定数配列(週)があります。

StringGrid以前は曜日がグリッドの上部にまたがって日曜日から月曜日まであったものもありますが、グリッドの最初の列が日CurDateSelNowフォームが開始します)および次のグリッド列は、選択した日の翌日を格納します。

たとえば、土曜日が選択された日である場合:

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

次に、保存されている予約のリストを実行し、対応する曜日と日付の予約をグリッドに追加する手順があります。たとえば、予約が土曜日の23日の午後2時に行われた場合、配列WEEKの土曜日に対応するため、手順はy軸の午後2時に移動し、軸の5番目の列に移動します。

ただし、現在の列は当日によって変更されるため、保存された予約値は対応する日に移動しませんが、列が月曜日から日曜日に終了した場合に通常は日を保存する列に移動します。

週の開始が現在の日で、週の終わりが現在の日+ 6日になる、週の値を格納する新しい配列を作成することにしました。この配列を呼び出しましSelDayArrayた。

たとえば、土曜日の場合、この配列はで始まり、Index[0] = Saturdayで終わりIndex[6] = Fridayます。

この2番目の配列を埋めるためのコードを書き込もうとしましたが、正しく埋めるのに問題があるようです。

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 ReturnDayCellFunctionは、DayNo配列の固定定数配列に従ってを返しますWEEK。したがって、土曜日が当日として選択された場合、プロシージャは戻り5、の値CurDayNo= 5

したがって、私のReturnUpdatedDay手順では、myの値をに設定する必要がSelDayArrayありTheCurrentDay [Index 0]ますTheCurrentDay+6 [Index 6]

これは、「土曜日」の日に機能します。リストをメモに印刷すると、土曜日、日曜日、月曜日...金曜日の値が表示されます。

ただし、土曜日の数日前に試行すると、アクセス違反エラーが発生するか、リストの最後の2日間が保存/印刷されません。日曜日を選択すると、アクセス違反エラーが発生します。

誰かが私に手を差し伸べて、私が間違っていることを理解するのを手伝ってくれませんか。タイプミスや紛らわしい情報についてお詫びします。ありがとう。

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 に答える