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

解決


牛飼い  2008-02-07 01:06:00  No: 29679

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

  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-07 01:16:20  No: 29680

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

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-07 01:21:19  No: 29681

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-07 01:30:30  No: 29682

返信有難う御座います。

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

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

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

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

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


KHE00221  2008-02-07 02:24:55  No: 29683

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


牛飼い  2008-02-08 02:13:49  No: 29684

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

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


牛飼い  2008-02-08 02:14:33  No: 29685

有難う御座いました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加