ご存知のかたいらっしゃいましたらお願い致します。
windows 2000
delphi 7
下記のようなコードがあります。
dsg.colcount := 30;
dsg.colcount := 10;
***********************
procedure form.dsgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
sgd.cells[ACol,ARow] := PHeader(Objects[ACol,ARow])^.contents;
end;
formが表示された際に、dsgDrawCellが実行されます。
ただ場合によって,期待しているように動作していなかったので
下記のようなコードを追加しました。
procedure form.dsgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
showmessage(IntToStr(ACol));
sgd.cells[ACol,ARow] := PHeader(Objects[ACol,ARow])^.contents;
end;
この結果AColが0,28,29
0,28,29
(繰り返し)
//1〜27までのAColが抜けている
となっていました。
当たり前のように0,1,2,3,・・・29
0,1,2,3,・・・29
0,1,2,3,・・・29
繰り返し
//0〜ColCount - 1まで実行される。
と思っていました。
この違いは、どこにあるのでしょうか?
ご存知の方いらっしゃいましたらお願いします。
以上
これをやればわかるとおもうけど?
procedure TForm2.Button1Click(Sender: TObject);
begin
StringGrid1.Cells[1,1] := '1';
end;
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
Caption :=Caption + '1';
end;
dsgとsgd別物か・・・・前のはきにしないで
procedure TForm2.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Cells[ACol,ARow] := IntToStr(ACol) + ' ' + IntToStr(ARow);
end;
とやった場合に StringGrid に正常に値が代入されますが?
返信有難う御座います。
>dsgとsgd別物か・・・・
同じものです。すみません。間違えました。
この現象は、Applicationを立ち上げた直後のみ起こるんです。
直後は、0,28,29しかカラムが表示されていません。
ただしその後,form.dsgDrawCellが起こった場合全カラムが
いきなり表示されるんです。
この現象もいつの間にか起こるようになっていました。
何が原因なのでしょうか・・・
DrawCellで自分自身のCellsに代入するとループするので代入してはいけませんよ?
ありがとうございました。
別のところでもう少し探してみます。
有難う御座いました。
ツイート | ![]() |