コード上で指定したセルを反転表示されるには?

解決


  2005-09-02 02:37:06  No: 17346

TStringGridでセルのフォーカスをコード上から指定(変更)して
反転表示させたいのですが、方法をご存知の方がいらっしゃいましたら
教えて頂けますでしょうか。


anone  2005-09-02 03:58:56  No: 17347

こういうことかな

procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.Col := 2;
  StringGrid1.Row := 3;
end;


  2005-09-02 18:23:13  No: 17348

言葉が足りなくて申し訳有りません。
StringGrid上でクリックしたセルは通常点線枠で囲まれ、フォーカスが
StringGridから外れるとそのセルが青く反転表示されますよね?
そのセルをコード上に取得する為にはMouseToCellを使えば
良いと思うのですが、コード上からその選択されているCellを
変更するにはどうすれば良いのか四苦八苦している状態なのです。
ご存知の方がいらっしゃいましたら宜しくお願い致します。


  2005-09-02 18:40:58  No: 17349

あ・・・これで選択されたセルが移っているのですね。
済みませんでした。
出来ていないのは再描画の様です・・・。


anone  2005-09-02 19:24:55  No: 17350

Col プロパティー、Row プロパティーをヘルプで見てください。

> 出来ていないのは再描画の様です・・・。

これ意味が分かりませんけど


  2005-09-02 20:03:51  No: 17351

anone様、度々有難う御座います。
はい、書き込んだ後、ヘルプを見直して、正しくその事で有った事に気付きました。
申し訳有りません。

例えば、Col:1、Row:1が反転表示されている時に、コード上でCol:2、Row:3
と指定しても、反転表示されている部分は移動しませんよね?
その事なんですが。反転部分が移らないのは再描画がかかっていないからかな、
と思ったのですが、そもそも的外れでしょうか・・・。


どんなコード?  2005-09-02 20:21:02  No: 17352

Windowsのメッセージが処理されない間は反転部分は移りませんよ。


deldel  2005-09-02 20:58:52  No: 17353

多分、反転はフォーカスが別のコンポーネントに移らないと
更新されないのでは?

自分で描画したらどうでしょ?
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with TStringGrid(Sender).Canvas do begin
    if (gdSelected in State) then Brush.Color := clHighlight;

    Font.Color := TStringGrid(Sender).Font.Color;
    TextRect(Rect, Rect.Left + 2, Rect.Top + 2, TStringGrid(Sender).Cells[ACol,ARow]);
  end;
end;


anone  2005-09-03 00:46:11  No: 17354

前に示した

procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.Col := 2;
  StringGrid1.Row := 3;
end;

を試しましたか? ボタンにフォーカスがあるので青色部分は移動しますけど。
どのタイミングで実行してるのかまったく分かりませんので回答できません。


  2005-09-06 23:17:18  No: 17355

皆様にご丁寧にご指導頂いたにも関わらず返信が遅れまして、申し訳有りません。
Anone様が教えてくださった方法も試したのですが、青色(反転表示)部分は移動しませんでした。

procedure TForm1.ListviewMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Listview.MouseToCell(X,Y, RC, CC);
end;
でクリック位置を取得して、UP/downボタンを押すと、列COLの値を+-1して居ます。行の入替えを行っていて、クリックで選択した行を上げ下げ(CC := CC+-1;)しているんですが、反転表示が付いてこないのでどうしたものか・・・と。


Basser  2005-09-06 23:31:15  No: 17356

StringGrid1.Col := 2;
  StringGrid1.Row := 3;
  StringGrid1.Invalidate; // ←追加

で駄目ですか?


  2005-09-06 23:45:11  No: 17357

Basser様
Helpにも画面の再描画の事が書いてあったので
Refreshとか、Invalidateとか試してみたのですが、改善せず・・・

Delphiの5だからいけないのでしょうか・・・


  2005-09-06 23:52:14  No: 17358

出来ました。
再描画するタイミングを勝手にいじって居たのが原因でした。
Anone様、Basser様、Deldel様、どんなコード様。
貴重なお時間を割いて下さり、根気良く付き合って下さり、
本当に有難う御座いました。


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

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






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