TStringGridを正しく表示させるには?

解決


牛飼い  2008-02-06 16:06:00  No: 29679  IP: 192.*.*.*

ご存知のかたいらっしゃいましたらお願い致します。

  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まで実行される。

と思っていました。

この違いは、どこにあるのでしょうか?

ご存知の方いらっしゃいましたらお願いします。

以上

編集 削除
KHE00221  2008-02-06 16:16:20  No: 29680  IP: 192.*.*.*

これをやればわかるとおもうけど?

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;

編集 削除
KHE00221  2008-02-06 16:21:19  No: 29681  IP: 192.*.*.*

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 に正常に値が代入されますが?

編集 削除
牛飼い  2008-02-06 16:30:30  No: 29682  IP: 192.*.*.*

返信有難う御座います。

>dsgとsgd別物か・・・・
同じものです。すみません。間違えました。

この現象は、Applicationを立ち上げた直後のみ起こるんです。
直後は、0,28,29しかカラムが表示されていません。

ただしその後,form.dsgDrawCellが起こった場合全カラムが
いきなり表示されるんです。

この現象もいつの間にか起こるようになっていました。

何が原因なのでしょうか・・・

編集 削除
KHE00221  2008-02-06 17:24:55  No: 29683  IP: 192.*.*.*

DrawCellで自分自身のCellsに代入するとループするので代入してはいけませんよ?

編集 削除
牛飼い  2008-02-07 17:13:49  No: 29684  IP: 192.*.*.*

ありがとうございました。

別のところでもう少し探してみます。

編集 削除
牛飼い  2008-02-07 17:14:33  No: 29685  IP: 192.*.*.*

有難う御座いました。

編集 削除