DBGridの特定のセルにボタンを表示するには?

解決


moru  2006-10-05 07:39:46  No: 23463

はじめまして。いつも勝手にお世話になってます。
早速なのですが、DBGridの特定のセルにボタンを表示させることはできませんでしょうか?
具体的には、そのボタンをクリックすることで、Gridとは別のDataSetのデータをそのレコードへ読み込ませたいと考えています。
DBGridに用意されている三点リーダ(…)以外で、お願いします。
環境:Delphi7Pro、Windows2000


moru  2006-10-05 17:10:40  No: 23464

追加レスです。
ここでいうボタンは、コンポーネントでもかまいませんし、何かしらの方法で見た目のしっかりしたボタン風のものでもかまいません。
ちなみに、先ほどの発言の補足ですが、三点リーダ(…)とはButtonStyleプロパティのcbsEllipsisで表示されるボタンのことです。
よろしくお願いします。


カフェ  2006-10-05 18:04:21  No: 23465

おはようございます。

私がやった方法を以下に書きます。
(手元にC++Builderしかなくて申し訳ないのですが、VCLの使い方なんかは同じだと思いますので、参考にしてください。)

DBGridのOnDrawCell()でボタン描画
  DBGrid->Canvas->Draw (Rect.Left, Rect.Top, ビットマップのボタン画像);

DBGridのOnMouseDown()で押下処理を記述
  // 左ボタンクリック以外は何もしない
  if (Button != mbLeft)return;

  // クリックされたセル位置取得
  int col, row;
  sGrid->MouseToCell (X, Y, col, row);

  // セル以外なら何もしない
  if (row < 0 || col < 0) return;

  // タイトル行以外の場合
  if (row > 0) {
    // ボタン配置セル以外なら何もしない
    if (col < sGrid->ColCount-1 || gidx->Count < 1) return;
    ・・・処理を記述
  }

です。
もしくはボタンを動的生成して配置。その時にButton->OnClick = 処理関数へのポインタとするとかが簡単だと思います。


moru  2006-10-06 00:15:26  No: 23466

カフェさんありがとうございます。
教えていただいたとおりの方法で無事、解決しました。

>もしくはボタンを動的生成して配置。その時にButton->OnClick = 処理関数への
>ポインタとするとかが簡単だと思います。
できれば、そうしたいのですが、生成してからの配置の制御(スクロール時も)をどうすればよいのか、まだまだ未熟な私にはわかりません。きっと、Grid上の座標を計算させるのかな〜と思いますが。
きっと他の発言で参考になるものがあるかなと思いますので、勉強していきます。
ありがとうございました。


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

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






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