TStringGridでセルのフォーカスをコード上から指定(変更)して
反転表示させたいのですが、方法をご存知の方がいらっしゃいましたら
教えて頂けますでしょうか。
こういうことかな
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Col := 2;
StringGrid1.Row := 3;
end;
言葉が足りなくて申し訳有りません。
StringGrid上でクリックしたセルは通常点線枠で囲まれ、フォーカスが
StringGridから外れるとそのセルが青く反転表示されますよね?
そのセルをコード上に取得する為にはMouseToCellを使えば
良いと思うのですが、コード上からその選択されているCellを
変更するにはどうすれば良いのか四苦八苦している状態なのです。
ご存知の方がいらっしゃいましたら宜しくお願い致します。
あ・・・これで選択されたセルが移っているのですね。
済みませんでした。
出来ていないのは再描画の様です・・・。
Col プロパティー、Row プロパティーをヘルプで見てください。
> 出来ていないのは再描画の様です・・・。
これ意味が分かりませんけど
anone様、度々有難う御座います。
はい、書き込んだ後、ヘルプを見直して、正しくその事で有った事に気付きました。
申し訳有りません。
例えば、Col:1、Row:1が反転表示されている時に、コード上でCol:2、Row:3
と指定しても、反転表示されている部分は移動しませんよね?
その事なんですが。反転部分が移らないのは再描画がかかっていないからかな、
と思ったのですが、そもそも的外れでしょうか・・・。
Windowsのメッセージが処理されない間は反転部分は移りませんよ。
多分、反転はフォーカスが別のコンポーネントに移らないと
更新されないのでは?
自分で描画したらどうでしょ?
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;
前に示した
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Col := 2;
StringGrid1.Row := 3;
end;
を試しましたか? ボタンにフォーカスがあるので青色部分は移動しますけど。
どのタイミングで実行してるのかまったく分かりませんので回答できません。
皆様にご丁寧にご指導頂いたにも関わらず返信が遅れまして、申し訳有りません。
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;)しているんですが、反転表示が付いてこないのでどうしたものか・・・と。
StringGrid1.Col := 2;
StringGrid1.Row := 3;
StringGrid1.Invalidate; // ←追加
で駄目ですか?
Basser様
Helpにも画面の再描画の事が書いてあったので
Refreshとか、Invalidateとか試してみたのですが、改善せず・・・
Delphiの5だからいけないのでしょうか・・・
出来ました。
再描画するタイミングを勝手にいじって居たのが原因でした。
Anone様、Basser様、Deldel様、どんなコード様。
貴重なお時間を割いて下さり、根気良く付き合って下さり、
本当に有難う御座いました。
ツイート | ![]() |