お世話になります。
FMXのTStringGridに、幾つかのTStringColumnとTCheckColumnを設けまして、最初のTStringColumnはNoとして自動で行番号を割り当てる様にするために次の様なコードを書きました。
併せて、CheckCloumnも描画するコードも記述しておりますが、セルが編集状態から抜けた際にチェックボックスが消えてしまいます。
どの様に記述すれば良いかご存知の方居られましたらアドバイス頂けないでしょうか?
procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
begin
if Column is TCheckColumn then
begin
TCheckColumn(Column).DefaultDrawCell(Canvas, Bounds, Row, Value, State);
end
else if Column.Name = 'AutoNo' then
TStringColumn(Column).DefaultDrawCell(Canvas, Bounds, Row, Row + 1, State);
end;
procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var obj:TFMXObject;
stl:TStyleObject;
begin
if Column is TCheckColumn then
begin
//以下は何も描画しないみたいです
//TCheckColumn(Column).DefaultDrawCell(
// Canvas,Bounds,Row,Value,State
//);
if Assigned(Self.StyleBook) then
obj:=Self.StyleBook
else
obj:=TStyleManager.ActiveStyle(Self);
if LowerCase(Value.AsString)='true' then
stl:=TStyleObject(obj.FindStyleResource('checkcellstyle.checkboxchecked'))
else
stl:=TStyleObject(obj.FindStyleResource('checkcellstyle.checkboxunchecked'));
stl.DrawToCanvas(Canvas,Bounds,1);
end
else if Column.Name='AutoNo' then
Column.DefaultDrawCell(
Canvas,Bounds,Row,Row+1,State
);
end;
Delphi XE10.2 Tokyo Pro
では動いているように思いますが動かなかったらすいません。
uses FMX.Styles,FMX.Styles.Objects;
を入れるのを忘れてました。
すいません。
度々すいません。ミスがありました。
uses FMX.Styles,FMX.Styles.Objects;
procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var obj:TFMXObject;
stl:TStyleObject;
begin
if Column is TCheckColumn then
begin
//以下は何も描画しないみたいです
//TCheckColumn(Column).DefaultDrawCell(
// Canvas,Bounds,Row,Value,State
//);
if Assigned(Self.StyleBook) then
obj:=Self.StyleBook.Style //←ココミスしていました
else
obj:=TStyleManager.ActiveStyle(Self);
if LowerCase(Value.AsString)='true' then
stl:=TStyleObject(TStyleBook(obj).FindStyleResource('checkcellstyle.checkboxchecked'))
else
stl:=TStyleObject(TStyleBook(obj).FindStyleResource('checkcellstyle.checkboxunchecked'));
stl.DrawToCanvas(Canvas,Bounds,1);
end
else if Column.Name='AutoNo' then
Column.DefaultDrawCell(
Canvas,Bounds,Row,Row+1,State
);
end;
mamさん
有難うございます。
そのままコードを拝借しまして、チェックボックスが見事に表示され、テキストも問題無く表示出来ています。
凄いです。私もTCheckColumnのDefaultDrawCellのコードを見て、何も描画される気配が無いと感じておりましたが、解決策が見い出せず仕様を制限しようかなぁと悩んでいるところでした。
気のせいか、DefaultDrawingプロパティの扱いもVCLとは少し違う様な気がしています。もう少し勉強が必要ですね。
この度は本当に助かりました。
ツイート | ![]() |