GridでChartを表示するには?

解決


ester  2005-06-04 02:20:49  No: 15359  IP: [192.*.*.*]

列数1のStringGrid(またはDrawGrid)に数値データを渡して、各Cellに1本のBarを表示して、Grid全体として横棒グラフを表示しようと思っています。
OnDrawCellイベントでGridのCanvasに描画するには数値データを渡すのが困難です。
何かいい方法はありませんか。

編集    削除
ester  2005-06-04 03:44:05  No: 15360  IP: [192.*.*.*]

お騒がせしました。自解しました。

編集    削除
何が問題?  2005-06-04 03:58:39  No: 15361  IP: [192.*.*.*]

StrToInt、IntToStr関数があるんだから、各セルの値が数字文字列であっても不都合は無いのでは?
どうしてもセルの値を数値で保持したいのなら、Cols[].Objectsを使う手もあるけど…

編集    削除
ester  2005-06-04 17:53:10  No: 15362  IP: [192.*.*.*]

A[]は数値配列で、
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var i,j,k,s:integer;
begin
  s:=TStringGrid(Sender).GridLineWidth;
  k:=TStringGrid(Sender).defaultrowheight;
  i:=k div 3;
  j:=i+Arow*(k+s);
  Rect.left:=0;
  Rect.right:=A[Arow];
  Rect.top:=j;
  Rect.Bottom:=j+i ;
  TStringGrid(Sender).Canvas.Brush.Color:=clblue;
  TStringGrid(Sender).Canvas.Rectangle(Rect);
end;
のようなことがやりたかったのです。失礼しました;。

編集    削除
いや、だから  2005-06-04 19:35:44  No: 15363  IP: [192.*.*.*]

数値配列なんかいらず、Cellsに数値を文字列で書き込んでおけば

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  h:integer;
  r:TRect;
begin
  h := (Rect.Bottom-Rect.Top) div 3;
  r := Rect;
  r.Top := r.Top+h;
  r.Bottom := r.Bottom-h;
  r.Right := r.Left+StrToInt(TStringGrid(Sender).Cells[ACol,ARow]);
  with TStringGrid(Sender).Canvas do
  begin
    Brush.Color := clBlue;
    FillRect(r);
  end;
end;

こんな感じで横棒グラフができるけど。

編集    削除
ester  2005-06-04 20:54:48  No: 15364  IP: [192.*.*.*]

素晴らしい、ナルホドッ!でした。
視野が開けました。
いや、だからさん、どうもありがとうございました。

編集    削除