GridでChartを表示するには?

解決


ester  2005-06-04 02:20:49  No: 15359

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


ester  2005-06-04 03:44:05  No: 15360

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


何が問題?  2005-06-04 03:58:39  No: 15361

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


ester  2005-06-04 17:53:10  No: 15362

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

数値配列なんかいらず、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

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


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

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






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