ListViewでのカーソル制御

解決


だい  2003-09-10 20:28:03  No: 4725  IP: [192.*.*.*]

Delphi6 Pro SP2 (Win98)を使用しています。
ListViewを使用し、Tabキーでリストビューにフォーカスをあてて
カーソルキーを押すと、カーソルが先頭に移動してしまいます。
以前のフォーカス位置からカーソル移動するにはどのようにすれば
よろしいのでしょうか。主なコードは以下の通りです。

(FormCreate()にて)
with ListView1 do begin
  ViewStyle := vsReport;
  GridLines := True;
  ReadOnly := True;
  RowSelect := True;
  HideSelection := False;
    
  // 20行以上のリストを追加 (省略)

  ItemIndex := 20;
  Items[ItemIndex].MakeVisible(True);  // 表示を選択行に移動
// Items[ItemIndex].Selected := True;  // 使用しても効果なし
end;

よろしくお願いいたします。

編集    削除
にしの  2003-09-10 20:48:27  No: 4726  IP: [192.*.*.*]

前回位置から、TABでフォーカス移動してカーソルキーを押すまでに、ListViewに対して何かしていませんか?
こちらでは再現しませんでした。
# Delphi7
もしかしたらDelphi6固有の問題かもしれませんが、ちょっとわかりません。

編集    削除
にしの  2003-09-10 20:54:34  No: 4727  IP: [192.*.*.*]

言いたいことがわかりました。
前回の位置でなく、ItemIndexで指定したのに、ってことですね。
ItemIndexは、Selectedを変更するだけです。

フォーカス位置を変更したいのであれば、
ListView1.ItemFocused := ListView1.Items[20];
ですね。

編集    削除
だい  2003-09-10 21:15:46  No: 4728  IP: [192.*.*.*]

にしのさん、ありがとうございました。
おかげさまでうまく動作するようになりました。

ただ、ItemIndexの設定と ItemFocusedとの違いがよく分かりません。
(実際、MakeVisibleで表示移動もしますし・・・)
もしよろしければ、ご教授願えませんでしょうか。

編集    削除
にしの  2003-09-10 22:07:30  No: 4729  IP: [192.*.*.*]

ItemIndexは、TListItemのSelectedプロパティを変更します。
ItemFocusedは、TListItemのFocusedプロパティを変更します。
Selectedは1つのViewのうち、複数がtrueの場合があります。
Focusedは、1つのViewのうち、1つがtrueか、すべてfalseの場合があります。

MakeVisibleは、そのItemを表示するだけなので、選択されている、フォーカスがあるなどの条件はありません。

編集    削除
にしの  2003-09-10 22:09:43  No: 4730  IP: [192.*.*.*]

ちょっと訂正。
> Selectedは1つのViewのうち、複数がtrueの場合があります。
Selectedは1つのViewのうち、1つ以上がtrueか、すべてfalseの場合があります。

Focusedが複数trueであることはありません。

編集    削除
だい  2003-09-10 22:21:55  No: 4731  IP: [192.*.*.*]

にしのさん、ありがとうございます。

複数行選択を考慮すると、Selectedと Focusedが
必要になるんですね。よく分かりました。
本当にありがとうございました。

編集    削除