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

解決


 2005-09-01 17:37:06  No: 17346  IP: 192.*.*.*

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

編集 削除
anone  2005-09-01 18:58:56  No: 17347  IP: 192.*.*.*

こういうことかな

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

編集 削除
 2005-09-02 09:23:13  No: 17348  IP: 192.*.*.*

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

編集 削除
 2005-09-02 09:40:58  No: 17349  IP: 192.*.*.*

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

編集 削除
anone  2005-09-02 10:24:55  No: 17350  IP: 192.*.*.*

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

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

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

編集 削除
 2005-09-02 11:03:51  No: 17351  IP: 192.*.*.*

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

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

編集 削除
どんなコード?  2005-09-02 11:21:02  No: 17352  IP: 192.*.*.*

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

編集 削除
deldel  2005-09-02 11:58:52  No: 17353  IP: 192.*.*.*

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

自分で描画したらどうでしょ?
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-02 15:46:11  No: 17354  IP: 192.*.*.*

前に示した

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

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

編集 削除
 2005-09-06 14:17:18  No: 17355  IP: 192.*.*.*

皆様にご丁寧にご指導頂いたにも関わらず返信が遅れまして、申し訳有りません。
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 14:31:15  No: 17356  IP: 192.*.*.*

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

で駄目ですか?

編集 削除
 2005-09-06 14:45:11  No: 17357  IP: 192.*.*.*

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

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

編集 削除
 2005-09-06 14:52:14  No: 17358  IP: 192.*.*.*

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

編集 削除