StringGridについて


しんちゃん  2015-05-27 20:57:09  No: 47328

こんにちは。
いつもお世話になっております。

StringGridを使用した簡単なものを作成しています。
そのStringGrid上にマウスでクリック行の色を変更したいのでずが
何か方法はあるでしょうか。
Delphi XE5で作成しています。


Mr.XRAY  2015-05-27 22:17:29  No: 47329

>そのStringGrid上にマウスでクリック行の色を変更したいのでずが
>何か方法はあるでしょうか。

TStringGird のどこかのセルをクリックしたら,そのセルが含まれる行全体の,セルの背景色を変更したい,
というのでしたら,あると思いますよ.

(1) セルのクリックを検出する
(2) そのセルの行番号(?) を知る
(3) そのセルがある行に対して,背景色の描画コードを書く

という手順でできると思います.
ほとんどそのままですが,問題解決には,このように (頭の中でいいので) 箇条書きにします.
そうすれば,どの部分の処理が不明なのか,解決しなければならないかが明確になます.
そして,分かる部分だけは,とにかくコードを書いてみることです.
抽象的な文章だと,どう返していいのか迷ってしまいます.


Mr.XRAY  2015-05-27 22:19:55  No: 47330

>そして,分かる部分だけは,とにかくコードを書いてみることです.

この時,面倒でも,新規にプロジェクトを作成してコーディングします.
これは,余計なコードや設定を除外するためです.
そうしないと,問題が発生した場合に,原因を探すのに苦労することがあります.


deldel  2015-05-28 01:55:21  No: 47331

単純に、OptionsプロパティのgoRowSelectをTrueにするのはだめでしょうか?


Mr.XRAY  2015-05-28 02:13:37  No: 47332

>単純に、OptionsプロパティのgoRowSelectをTrueにするのはだめでしょうか?

本当は,もしかしたら,そういうとこなのかも知れませんが,
残念ながら,質問の文章からは判断できないですね.
「色を変更したい」と書いていますから.
例えば「該当する行を選択状態にしたい」なら別ですが.


しんちゃん  2015-05-28 04:57:28  No: 47333

Mr.XRAYさん、アドバイスありがとうございます。
マウスで選択した行を選択行にした上で、行の背景色を黄色で
文字色を黒色にしたっかのですが・・

ご指摘の通り頑張ります。


しんちゃん  2015-05-28 05:01:49  No: 47334

deldelさん、お返事ありがとうございます。
ご教示いただいたgoRowSelectをTrueにしましたが
変化はありませんでした。


  2015-05-28 06:27:52  No: 47335

この手の質問は、調べればすぐ動くサンプルが出てきます。
調べてためし、動かなかったらここで聞くという形にすると、より問題解決
も早くなると思います。

xxx


KHE00221  2015-05-29 07:27:48  No: 47336

>deldelさん、お返事ありがとうございます。
>ご教示いただいたgoRowSelectをTrueにしましたが
>変化はありませんでした。

gdsThemed だと選択領域が見た目の変化がわかりにくいからかな?

type
  TStringGrid = class(vcl.Grids.TStringGrid)
  private
  public
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  end;

procedure TStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
begin
  if gdSelected in AState then
  begin
    Canvas.Brush.Color := clYellow;
    Canvas.Font.Color := clBlack;
  end;
  inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    StringGrid1.Options := StringGrid1.Options + [goRowSelect] - [goRangeSelect];
end;


しんちゃん  2015-05-30 05:20:14  No: 47337

KHE00221さん、ご回答ありがとうございます。

出張中ですので明日、帰社してからトライいたします。


しんちゃん  2015-05-31 00:47:09  No: 47338

KHE00221さん、試してみました。
結果から申しますと
  TStringGrid = class(vcl.Grids.TStringGrid)
のところでコンパイルエラーが発生して動作しませんでした。

わからないなりに色々試してみましたが結局、コンパイルできませんでした。
残念です。


Harry  2015-05-31 01:24:25  No: 47339

しんちゃんさん、エラーの報告はその内容をコピー&ペーストして提示しないといけません。
で、またいつの間にかDelphi7に変わってるとかは無いでしょうね?

あと、タイトルが雑すぎます。
新規質問の際に、以下の注意書きが表示されていたはずです。
>    ・「〜するには?」のような質問形式にしてください。
>    ・「〜について」の形式は好ましくありません。

きちんと質問される方は、よく考え、工夫して、簡潔明瞭なタイトルにしておられますよ。


  2015-06-01 05:21:04  No: 47340

当事者であるあなたが「分からない」としか表現できないことは、誰も分かりません。まず状況を客観的かつ詳細に説明してはどうでしょうか。
そもそも、答えはここまでの書き込みで既に出ていますよ。回答を求める割にはあまり人の回答をご覧になっていないようですが。


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

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






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