StreingGridにチェックボックスのようなもの可能ですか?
やりたいことは、各Gridの一つのCellをClickしたらそこにチェックが入ったり、または色がそこだけ変わったりという操作をしたいです。
OnMouseDownイベントなどで処理しなければいけませんかね。
一部分だけに処理をする方法を教えて下さい。
よろしくお願いします。
コンポーネントで処理しようと思えば
MOStringGrid
https://www.petitmonte.com/bbs/answers?question_id=3815
グリッド寄生コンポーネント
http://park15.wakwak.com/~nam-g/delphi/index.html
等がありますが。
自前で処理しようと思えばOnDrawCellで自分で描画する事に
なると思います、その場合OnDrawCellで検索してみて下さい。
昔回答したやり方です。参考にどうぞ。
https://www.petitmonte.com/bbs/answers?question_id=5670
一部だけチェックボックスを表現する為には,ARowとAColを制御してください。
色の変更は掲示板で検索かければサンプルあると思います。
前にここで教えて貰った方法です。
カーソルがあるグリッドを黄色に塗りつぶすサンプルです。
ソフトから抽出してサンプルにしてみました。
ご参考までに・・・
あと、古いDelphi3で記述してますので、ColとRowをAColとARowに書き換える必要があるかも知れません。
var
Form1: TForm1;
sw1:boolean=false;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
sw1 := true;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
begin
if sw1 then begin
StringGrid1.canvas.Brush.Color := clYellow;
StringGrid1.Canvas.FillRect(rect);
StringGrid1.Canvas.Font.Color := clBlack;
drawtext(StringGrid1.canvas.Handle,
PChar(StringGrid1.cells[col,row]),
Length(StringGrid1.cells[col,row]),
rect,DT_LEFT);//WinAPIを使って、セルを正しく再描画
sw1 := false;
end;
end;
こゆうことかな?
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if StringGrid1.Objects[ACol,ARow] = Pointer(1) then
begin
StringGrid1.OnDrawCell := nil;
StringGrid1.Canvas.Brush.Color := clRed;
TStringGridEx(StringGrid1).DrawCell(ACol,ARow,Rect,State);
StringGrid1.OnDrawCell := StringGrid1DrawCell;
end;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if StringGrid1.Objects[ACol,ARow] = Pointer(0) then
begin
StringGrid1.Objects[ACol,ARow] := Pointer(1);
end
else
begin
StringGrid1.Objects[ACol,ARow] := Pointer(0);
end;
end;
みなさん意見ありがとうございます。
DrawCellで選択されたセルの情報に色を描くという形ですね。
ちなみに解決としますが、KHE00221さんのサンプルにある
TStringGridExはないため実行できませんでした。
>ちなみに解決としますが、KHE00221さんのサンプルにある
>TStringGridExはないため実行できませんでした。
下記の追加行を追加してテストしてみて下さい。
type
TStringGridEx=class(TStringGrid); //追加
TForm1 = class(TForm)
TSさん
ありがとうございます。
思っていたようにできました。
みなさんありがとうございました
ツイート | ![]() |