列数1のStringGrid(またはDrawGrid)に数値データを渡して、各Cellに1本のBarを表示して、Grid全体として横棒グラフを表示しようと思っています。
OnDrawCellイベントでGridのCanvasに描画するには数値データを渡すのが困難です。
何かいい方法はありませんか。
お騒がせしました。自解しました。
StrToInt、IntToStr関数があるんだから、各セルの値が数字文字列であっても不都合は無いのでは?
どうしてもセルの値を数値で保持したいのなら、Cols[].Objectsを使う手もあるけど…
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;
のようなことがやりたかったのです。失礼しました;。
数値配列なんかいらず、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;
こんな感じで横棒グラフができるけど。
素晴らしい、ナルホドッ!でした。
視野が開けました。
いや、だからさん、どうもありがとうございました。
ツイート | ![]() |