TStringGrid の onClickイベントでGridsortを使ってソートします。
それに連動してOnDrawCell の背景色も変更して欲しいのですが、
ソートした後、ondrawcellで作成した背景色が固定されたまま連動しません。
どのような手続きが必要なのでしょうか。
Gridsortを使ったあと、StringGridのInvalidate メソッドを使ってみたら、どうなりますか?
以下のようなコードで実行してみましたが、背景色固定のままで変化無しです。
******************
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
//if (Pos.y<> 0) then Exit;
// クリックされた列を調べる
case Pos.x of
1:begin
Gridsort(stringgrid1,1);//
stringgrid1.Invalidate;
end;
end;
end;
> 背景色固定のままで変化無しです。
OnDrawCellイベントのコードに関する情報がまったくないので、具体的なことは、言えないのですが、
OnDrawCellイベントのコードが、背景色固定になるように書かれている可能性は?
こんばんは。
OnDrawCellイベントのコードは以下のような感じです。
*****************
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Point:TPoint;//文字列の表示座標
i,j,nTosu,Code:integer;
begin
with StringGrid1.Canvas do begin//StringGrid1.Canvasの初期化
Brush.Color := clWhite;
Font.Color := clBlack;
Font.Size:=9;
Font.Style:=[];
if gdSelected in State then
Brush.Color:=clLime;
end;
with stringgrid1 do begin
if((ARow= 0) and (ACol=1)) then
with Canvas do begin
font.color:=clred;
brush.Color:=clwhite;
end;
if((ARow= 1) and (ACol=1)) then
with Canvas do begin
font.color:=clblue;
brush.Color:=clblack;
end;
if((ARow= 2) and (ACol=1)) then
with Canvas do begin
font.color:=clyellow;
brush.Color:=clgreen;
end;
if((ARow= 3) and (ACol=1)) then
with Canvas do begin
font.color:=claqua;
brush.Color:=clblack;
end;
end;
Point.x := Rect.Left;
Point.y := Rect.Top;
StringGrid1.Canvas.TextRect(Rect,
Point.x,
Point.y,
StringGrid1.Cells[ACol,ARow]);
end;
> OnDrawCellイベントのコードは以下のような感じです。
詳しく見ていませんが、コード自体が、背景色固定になるように書かれている気がします。
> 連動してOnDrawCell の背景色も変更して欲しい
とのことですが、どのように変更してほしいのですか?
stringgrid1のonclickイベントで、Gridsortを使い数値の昇順を実行するとして
[A]のデータを[B]データのように昇順して背景色も変更したい。
現状は、Gridsortすると数値は置き換わるのですが、背景色が[A]データの背景色のまま固定された状態です。
************************************************
[A]col1をクリックする
行|背景色(brush.color)|数値
1|赤 数値3
2|青 数値4
3|黄 数値1
4|緑 数値2
*****************
[B]では昇順になり背景色も変更される
行|背景色(brush.color)|数値
1|緑 数値1
2|黄 数値2
3|青 数値3
4|赤 数値4
*****************
[★訂正]数値と背景色がリンクしていませんでした。
************************************************
[A]col1をクリックする
行|背景色(brush.color)|数値
1|赤 数値3
2|青 数値4
3|黄 数値1
4|緑 数値2
*****************
[B]では昇順になり背景色も変更される
行|背景色(brush.color)|数値
1|黄 数値1
2|緑 数値2
3|赤 数値3
4|青 数値4
*****************
if((ARow= 3) and (ACol=1)) then <---- この条件を font.color := claqua にする条件に変える
with Canvas do begin
font.color:=claqua;
brush.Color:=clblack;
end;
if((ARow= 3) and (ACol=1)) then <---- この条件を font.color := claqua にする条件に変える
*****************
if以外の条件分岐でソートすると背景色が変わる条件に変える。。。すみません。もう少し教えて下さい。
1|赤 数値3 数値3は何故赤?
2|青 数値4 数値4は何故青?
3|黄 数値1 数値1は何故黄色?
4|緑 数値2 数値2は何故緑?
StringGrid.Object に色保存してその色で描画するか
> if((ARow= 3) and (ACol=1)) then <---- この条件を font.color := claqua にする条件に変える
> if以外の条件分岐でソートすると背景色が変わる条件に変える。。。すみません。もう少し教えて下さい。
ARow= 1
ARow= 2
ARow= 3
の箇所が、行で背景色固定しているので、
この箇所を、
StringGrid1.Cells[数値が格納されている列,ARow] = 該当する数値
みたいな条件に書き換えれば、良さそうな気がします。
ツイート | ![]() |