StreingGridにチェックボックスのようなもの

解決


めん  2010-03-16 20:00:12  No: 38039

StreingGridにチェックボックスのようなもの可能ですか?

やりたいことは、各Gridの一つのCellをClickしたらそこにチェックが入ったり、または色がそこだけ変わったりという操作をしたいです。
OnMouseDownイベントなどで処理しなければいけませんかね。
一部分だけに処理をする方法を教えて下さい。

よろしくお願いします。


TS  2010-03-16 22:01:59  No: 38040

コンポーネントで処理しようと思えば
MOStringGrid
https://www.petitmonte.com/bbs/answers?question_id=3815
グリッド寄生コンポーネント
http://park15.wakwak.com/~nam-g/delphi/index.html
等がありますが。

自前で処理しようと思えばOnDrawCellで自分で描画する事に
なると思います、その場合OnDrawCellで検索してみて下さい。


Ru  2010-03-16 22:03:52  No: 38041

昔回答したやり方です。参考にどうぞ。
https://www.petitmonte.com/bbs/answers?question_id=5670

一部だけチェックボックスを表現する為には,ARowとAColを制御してください。
色の変更は掲示板で検索かければサンプルあると思います。


Delphi大好き  2010-03-17 00:08:05  No: 38042

前にここで教えて貰った方法です。
カーソルがあるグリッドを黄色に塗りつぶすサンプルです。
ソフトから抽出してサンプルにしてみました。
ご参考までに・・・

あと、古い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;


KHE00221  2010-03-17 06:35:59  No: 38043

こゆうことかな?

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;


めん  2010-03-18 17:57:01  No: 38044

みなさん意見ありがとうございます。
DrawCellで選択されたセルの情報に色を描くという形ですね。

ちなみに解決としますが、KHE00221さんのサンプルにある
TStringGridExはないため実行できませんでした。


TS  2010-03-18 18:34:51  No: 38045

>ちなみに解決としますが、KHE00221さんのサンプルにある
>TStringGridExはないため実行できませんでした。
下記の追加行を追加してテストしてみて下さい。

type
  TStringGridEx=class(TStringGrid);  //追加
  TForm1 = class(TForm)


めん  2010-03-19 18:39:54  No: 38046

TSさん
ありがとうございます。
思っていたようにできました。

みなさんありがとうございました


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

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






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