StringGridで選択した行に同期して固定セルの色を変えたい


mook  2015-11-16 19:21:00  No: 47754

タイトルの通りStringGridで選択した行に同期して固定セルの行の色を変えたいのですが
以下のソースでStringGrid1Clickの中で強制的にStringGrid1.Refreshしないと
カーソルと同時に固定セルの色が変わりません。

StringGrid1.Refreshをしますと画面がチカチカしますので
StringGrid1.Refreshを使わなくてもいい方法は無いでしょうか。

よろしくご教授お願いします。

尚、環境は Win8.1+Delphi6.0 です。

//-------------------------------------------------
〜略〜
procedure TForm1.FormShow(Sender: TObject);
begin
  StringGrid1.Options := StringGrid1.Options + [goRowSelect] - [goEditing] - [goRangeSelect];
end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  StringGrid1.Refresh;             // ***
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  s1: string;
  SRect: TGridRect;
  iOptions: Integer;
begin
  SRect  := TStringGrid(sender).Selection ;
  //------------------------------------------------
  // 固定部
  if (gdFixed In State) then begin
     with TStringGrid(sender).Canvas do begin
       if (Acol>=0) and (ARow>=SRect.Top) and (ARow<=SRect.Bottom) then begin
          Brush.Color := clAqua;
          FillRect(Rect);
       end;
     end;
  end;

  //------------------------------------------------
  // 可変部 / 一行全部色変更
  if (Acol>=0) and (ARow>=SRect.Top) and (ARow<=SRect.Bottom) then begin
     with TStringGrid(sender).Canvas do begin
       if (Acol>=1) then begin
          s1 := TStringGrid(sender).Cells[ACol, ARow];
          Brush.Color := clAqua ;
          FillRect(Rect);

          iOptions := DT_SINGLELINE or DT_LEFT or DT_VCENTER ;
          DrawTextEx(TStringGrid(sender).Canvas.Handle, PChar(s1), Length(s1), Rect, iOptions, nil);
       end;
     end;
  end;
end;


tor  2015-11-16 20:01:21  No: 47755

テメで更新したいセルの座標を求めて、ノメでその範囲の再描画をかければいいです。
テメとノメで検索すればコード例が出てくると思いますが、例えばこちらで。
モヌの一部のセルの色を変えるには?ヲサコッッョョョッュットツツモッョソォイーーエーオッーエーオーーウオョ

それから、セルの選択スマウスクリックヲサとは限らないので
マテではなくてマモテあたりを使った方がいいかと。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアアッアカィ月ゥ アアコイケコアケ  書込者ノト:ロ 」 ァ」ハノ

 ン

追記、最近のグリッドにはノテメソッドが追加されているので
利用できるようならそちらを使った方がいいですね。
トヲサカョーだとまだないと思いますが。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアアッアカィ月ゥ アイコオーコオオ  書込者ノト:ロ 」 「 ン

ヲサさん、早速のご回答ありがとうございます。

早速試してみました。
最初ちょっと想定していた方法と異なっていましたので戸惑いがありましたが
実際やってみましたら、ちょっと工夫が要りましたが望んだ仕様に出来ました。

一応今回のソースを以下にまとめています。

今回この方法で進めてみたいと思います。
ありがとうございました、助かりました。

後...
ヲサヲサ追記、最近のグリッドにはノテメソッドが追加されているので

今回ヲサノメヲサ等は使っていませんが
近々ト最新版を購入しようかと考えていますので
その時はまたいろいろと考えてみたいと思います。

ッッュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュ
〜略〜
ヲサヤニアョモヌアティモコヲサヤマゥサ

ヲサヲサッッモヌアョメサヲサヲサヲサヲサヲサヲサヲサッッヲサ不要になりました

ヲサヤニアョモヌアモティモコヲサヤマサヲサチテャ
ヲサヲサチメコヲサノサヲサヲサテモコヲサツゥサ

ヲサヲサヲサモヌアヲサヲサ
ヲサヲサヲサヲサマローャメンヲサヲサコスヲササ
ヲサヲサヲサヲサマローャチメンヲサコスヲサヤマィチゥサ
ヲサヲササ

ヲサヤニアョモヌアトティモコヲサヤマサヲサチテャヲサチメコヲサノサ
ヲサヲサメコヲサヤメサヲサモコヲサヤヌトモゥサ

ヲサヲサアコヲササ
ヲサヲサモメコヲサヤヌメサ
ヲサヲサマコヲサノサ

ヲサヲサモメヲサヲサコスヲサヤモヌィゥョモヲササ

ヲサヲサッッュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュ
ヲサヲサッッヲサ固定部
ヲサヲサヲサモヌアヲサヲサ
ヲサヲサヲサヲサヲサィチスーゥヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサチィマロチテャチメンゥヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサテョツョテヲサコスヲサヤティマロチテャチメンゥサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサテョニメィメゥサ
ヲサヲサヲサヲサヲサヲサヲササ
ヲサヲサヲサヲササ
ヲサヲササ

ヲサヲサッッュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュ
ヲサヲサッッヲサ可変部ヲサッヲサ一行全部色変更
ヲサヲサヲサィチヲサスーゥヲサヲサィチメヲサスモメョヤゥヲサヲサィチメヲサスモメョツゥヲサヲサ
ヲサヲサヲサヲサヲサヲサヤモヌィゥョテヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサィチヲサスアゥヲサヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサアヲサコスヲサヤモヌィゥョテロチテャヲサチメンサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサツョテヲサコスヲサチヲササ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサニメィメゥサ

ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサマヲサコスヲサトヤ゜モノホヌフナフノホナヲサヲサトヤ゜フナニヤヲサヲサトヤ゜ヨテナホヤナメヲササ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサトヤナィヤモヌィゥョテョネャヲサミティアゥャヲサフィアゥャヲサメャヲサマャヲサゥサ
ヲサヲサヲサヲサヲサヲサヲササ
ヲサヲサヲサヲサヲササ
ヲサヲササ

スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアアッアカィ月ゥ アウコーオコアケ  書込者ノト:ロ 」 「 ン
モコ 

すみません、解決チェックを忘れていました。


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

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






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