ListViewについて


ナンチャン  2015-12-13 21:34:28  No: 47812

こんにちは。
ListViewをフォームに貼り付けて、
そのListViewに表示されている複数行のうち
希望の行をマウスで複数選択することをしたいです。
MultiSelect プロパティをTrueにし、
キーボードのShiftやCtrlキーを利用してなら
複数行を選択できるのですが、
キーボードを使わずマウスのみで行を選択出来るように
ならないかと思っています。
何か方法はありますか?

Delphi XE5 Enterprise
Windows 8.1 Pro 64bit


通りすがり  2015-12-13 22:00:49  No: 47813

CheckBoxesプロパティをTrueにするのはいかがでしょう?(ちょっと違うかも)


ナンチャン  2015-12-13 22:56:58  No: 47814

通りすがりさん、アドバイスありがとうございます。
残念ながらCheckBoxはTrueにして
別の判定で利用しています。


Harry  2015-12-14 07:20:50  No: 47815

>キーボードを使わずマウスのみで行を選択出来るように

ひとかたまりというかブロックでの選択なら、ListView標準の操作(ドラッグしながら範囲指定)がありますよね。
一応、マウスのみで出来ますが…これのことではないのかな?

もしくは、Ctrlキーが押せているかのごとく、メッセージを書き換えるとか。


  2015-12-14 07:52:50  No: 47816

ListView1.Items[0].Selected := True;
などとやれば、任意の項目を選択状態にできます。
これをうまく制御してやればできると思います。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアイッアエィ月ゥ ーケコエイコウー  書込者ノト:ロ 「・「   ン

「あ」さんの案を参考にして速攻で作ってみました。
(もっといい方法があると思いますが・・・)

ヲサヲサ゜コヲサヤモフサ

ヲサヤニアョニティモコヲサヤマゥサ

ヲサヲサ゜ヲサコスヲサヤモフョテサ

ヲサヤニアョニテムィモコヲサヤマサヲサヲサテテコヲサツゥサ

ヲサヲサ゜ョニサ

ヲサヤニアョフヨアティモコヲサヤマゥサ

ヲサヲサコヲサラサ

ヲサヲサヲサ゜ョノマィノヤモィフヨアョモョノゥゥヲサスヲサュアヲサ
ヲサヲサヲサヲサ゜ョチィノヤモィフヨアョモョノゥゥサ

ヲサヲサヲサヲサコスヲサーヲサヲサミィ゜ョテゥヲサヲサ
ヲサヲサヲサヲサフヨアョノロモヤノィ゜ロンゥンョモヲサコスヲサヤサ
ヲサヲササ

ヲサヤニアョツアティモコヲサヤマゥサ

ヲサヲサコヲサラサ

ヲサヲサ゜ョテサ
ヲサヲサヲサヲサコスヲサーヲサヲサミィフヨアョノョテゥヲサヲサ
ヲサヲサヲサヲサフヨアョノロンョモヲサコスヲサニサ
ヲサヲササ

スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアイッアエィ月ゥ ーケコオクコーク  書込者ノト:ロ 」 ァ」ハノ

 ン

標準のヘトが呼ばれるとその時点で単一選択の処理が行われてしまうので、渡さないように工夫する必要がありますね。
カスタムコンポーネントを派生するつもりがないのなら、ラミを乗っ取るのが早道でしょうか。

クラスの宣言で
ヲサヲサヲサヲサニモフミコヲサヤラヘサ
ヲサヲサヲサヲサヲサヘフミィヲサコヲサヤヘゥサ

と自分用のメッセージハンドラを用意して、マテあたりで差し替えて……
  ヲサヤニアョニティモコヲサヤマゥサ
  
  ヲサヲサニモフミヲサコスヲサフヨアョラミサ
  ヲサヲサフヨアョラミヲサコスヲサヘフミサ
  サ

この中で自前でメッセージを判定して、項目選択の処理をすると。
  ヲサヤニアョヘフミィヲサコヲサヤヘゥサ
  
  ヲサヲサコヲサヤラヘフツトサ
  ヲサヲサコヲサヤフノサ
  
  ヲサヲサヲサョヘヲサスヲサラペフツユヤヤマホトマラホヲサヲサ
  ヲサヲサヲサヲサッッヲサラベル部分がクリックされたか判定
  ヲサヲサヲサヲサヲサコスヲサヤラヘフツトィゥサ
  ヲサヲサヲサヲサヲサィョヒヲサスヲサヘピフツユヤヤマホゥヲサヲサィマフヲサヲサフヨアョヌネヤノチィョリミャヲサョルミゥゥヲサ
  ヲサヲサヲサヲサ
  ヲサヲサヲサヲサヲサヲサヲサコスヲサフヨアョヌノチィョリミャヲサョルミゥサ
  ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサッッヲサネヤの結果から必ず項目があるはずだけれど、念のため
  ヲサヲサヲサヲサヲサヲサ
  ヲサヲサヲサヲサヲサヲサヲサヲサョモヲサコスヲササ
  ヲサヲサヲサヲサヲサヲサヲサヲサョニヲサコスヲササ
  ヲサヲサヲサヲサヲサヲササ
  ヲサヲサヲサヲサヲサヲサナサヲサッッヲサ処理した場合、元のラミには渡さないようにする
  ヲサヲサヲサヲササ
  ヲサヲササ
  ヲサヲサッッヲサ処理しなかったメッセージは元のラミに渡す
  ヲサヲサニモフミィゥサ
  サ

クリックするたびに選択を切り替える動きにしたいなら、ョモヲサコスヲサヲサのところをヲサョモヲサスヲサヲサョモヲサのようにしてください。

ただ、この方法だと左クリックを乗っ取るのでいくつか問題がありそうです。例えば……
・テォクリックヲサとかヲサモォクリックヲサした時の動きが変
・チでのドラッグ開始ができなくなる

代案としては、モノとノョモノでアイコンをもう一つ追加して、チェックボックスっぽく動作させるというのも考えられますね。
(上のコードにあるヌネヤノチを使えば、モアイコンがクリックされたかどうかの判定ができます)
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアイッアエィ月ゥ アーコウクコウア  書込者ノト:ロ 「・「   ン

今度は、「ネ」さんの案から(^^;
ただ、テキーがずっと押されっぱなしになる状態が発生するため、
お勧めはできませんが・・・
まぁ、できなくはないということで・・・

ヲサヤニアョフヨアヘヘィモコヲサヤマサヲサモコヲサヤモモサヲサリャ
ヲサヲサルコヲサノゥサ

ヲサヲサ゜ィヨピテマホヤメマフャヲサーャヲサーャヲサーゥサ

ヲサヤニアョフヨアヘユィモコヲサヤマサヲサツコヲサヤヘツサ
ヲサヲサモコヲサヤモモサヲサリャヲサルコヲサノゥサ

ヲサヲサ゜ィヨピテマホヤメマフャヲサーャヲサヒナルナヨナホヤニ゜ヒナルユミャヲサーゥサ

ヲサヤニアョツイティモコヲサヤマゥサ

ヲサヲサコヲサラサ

ヲサヲサヲサヲサコスヲサーヲサヲサミィフヨアョノョテゥヲサヲサ
ヲサヲサヲサヲサフヨアョノロンョモヲサコスヲサニサ
ヲサヲササ

ヲサヤニアョニテムィモコヲサヤマサヲサヲサテテコヲサツゥサ

ヲサヲサ゜ィヨピテマホヤメマフャヲサーャヲサヒナルナヨナホヤニ゜ヒナルユミャヲサーゥサ

スススススススススススススススススススススススススススススススススススススススス
ニコ ナンチャン
トコ イーアオッアイッアエィ月ゥ アアコアアコアー シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「。ィ」  ン

さん、サンプルコードの提供をありがとうございます。
すごいです。
マウスだけでマルチに選択できました。

図々しく、もうひとつ質問させてください。
選択された行をもう一度、選択すると今度は
選択解除になるようにするには。マテイベントに
どのような、記述をすればよいのでしょうか?
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアイッアエィ月ゥ アイコウイコーカ  書込者ノト:ロ 」 ァ」ハノ

 ン

改めて考えてみると、別にフヨのモにこだわる必要はないのではないでしょうか?
・クリックで項目の選択状態をマ・マできる
・見た目で選択状態がわかる
・選択された項目をプログラム的に取り出せる
これを満たしていればモじゃなくてもいいわけです。だったら自分で作っちゃえ!

ここではお手軽に、ヤフノョトをツにキャストしてッを表してみます。

ヲサヌヘモィコヲサヤフノゥコヲサツサ

ヲサヲサメヲサコスヲサツィョトゥサ

ヲサモヘモィコヲサヤフノサヲサコヲサツゥサ

ヲサヲサョトヲサコスヲサミィゥサ

ヲサヤニアョフヨアテトノィモコヲサヤテフヨサヲサノコヲサヤフノサヲサモコヲサヤテトモサヲサヲサトトコヲサツゥサ

ヲサヲサヲサヌヘモィノゥヲサヲサ
ヲサヲサヲサヲサッッヲサ選択されている項目の見た目を変える(例コヲサ文字を赤に)
ヲサヲサヲサヲサモョテョニョテヲサコスヲサメサ
ヲサヲササ

ヲサヤニアョフヨアヘトィモコヲサヤマサヲサツコヲサヤヘツサヲサモコヲサヤモモサヲサリャヲサルコヲサノゥサ
ヲサヲサ
ヲサヲサヲサヲサコヲサヤフノサ

ヲサヲサヲサモヲサスヲサロフンヲサ
ヲサヲサ
ヲサヲサヲサヲサヲサコスヲサフヨアョヌノチィリャヲサルゥサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ
ヲサヲサヲサヲサ
ヲサヲサヲサヲサヲサヲサモヘモィャヲサヲサヌヘモィゥゥサ
ヲサヲサヲサヲサヲサヲサッッヲサ状態を更新したら項目を再描画する
ヲサヲサヲサヲサヲサヲサノメィフヨアョネャヲサョトメィツゥャヲサゥサ
ヲサヲサヲサヲササ
ヲサヲササ

ところで、モノを使うといいと前に行ったけどアレは嘘だ!
ヤフヨのチェックボックスはモノで実現されているので、併用はできませんでしたィ゛ョ゛サ
けど、まだ項目のアイコンを使っていないのなら、ノノで選択状態を示すのはアリだと思うよ!
スススススススススススススススススススススススススススススススススススススススス
ニコ ネ
トコ イーアオッアイッアエィ月ゥ アカコーオコエイ  書込者ノト:ロ 」「。 ン

おお、なんかすごいいろんな案が出てますね。
やっぱり、ドラッグしながらのブロック範囲指定ではなかったようで。

さん
゜は思いつきませんでした。このように使うのですね。
自分が考えたのはもっと単純です。ウインドウプロシージャ部分だけを示しますと以下の通り。
※選択解除できて、ブロック範囲指定も併用可能ですが…細かい点を見ると、さんの指摘どおり微妙に変です。

ッッヲササブクラス化する部分は、さんの第一案と同じ仕組みです
ヲサヤニアョホフヨラミィヲサヘコヲサヤヘゥサ

ヲサヲサヲサヘヲサヲサヲサヘヲサ
ヲサヲサヲサヲサラペフツユヤヤマホトマラホコヲサラミコスラミヲサヲサヘピテマホヤメマフサ
ヲサヲササ
ヲサヲサニトフヨラミィヘゥサ

さん
>ヲサヲサヲサヲサヲサヲサッッヲサ状態を更新したら項目を再描画する
>ヲサヲサヲサヲサヲサヲサノメィフヨアョネャヲサョトメィツゥャヲサゥサ
任意の項目だけ更新するのはこのようにするのですね…。勉強になります。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアイッアカィ水ゥ アオコイイコオケ  書込者ノト:ロ 「・「   ン

色々案が出ていますので今さらですが、もうちょっとましなのを作ってみました。
ただ、フォーカスが当たる・当たらないで選択状態の行の表示が違うので、
やはりこれもだめかなぁと・・・

ヲサヲサ゜コヲサヤモフサ

ヲサヤニアョニティモコヲサヤマゥサ

ヲサヲサ゜ヲサコスヲサヤモフョテサ

ヲサヤニアョニテムィモコヲサヤマサヲサヲサテテコヲサツゥサ

ヲサヲサ゜ョニサ

ヲサヤニアョフヨアティモコヲサヤマゥサ

ヲサヲサヲサ゜ョノマィノヤモィフヨアョモョノゥゥヲサスヲサュアヲサヲサ
ヲサヲサヲサヲサ゜ョチィノヤモィフヨアョモョノゥゥサ
ヲサヲサヲサヲサ
ヲサヲサヲサヲサ゜ョトィ゜ョノマィノヤモィフヨアョモョノゥゥゥサ
ヲサヲササ

ヲサヤニアョフヨアテトノィモコヲサヤテフヨサ
ヲサヲサノコヲサヤフノサヲサモコヲサヤテトモサヲサヲサトトコヲサツゥサ

ヲサヲサヲサ゜ョテヲサスヲサーヲサヲサナサ

ヲサヲサヲサ゜ョノマィノヤモィノョノゥゥヲサスヲサュアヲサヲサ
ヲサヲサヲサヲサモョテョツョテヲサコスヲサラサ
ヲサヲサヲサヲサモョテョニョテヲサコスヲサツサ
ヲサヲサヲサヲサ
ヲサヲサヲサヲサモョテョツョテヲサコスヲサツサ
ヲサヲサヲサヲサモョテョニョテヲサコスヲサラサ
ヲサヲササ

スススススススススススススススススススススススススススススススススススススススス
ニコ ナンチャン
トコ イーアオッアイッアキィ木ゥ アアコーーコエケ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「。 ン

さん、アドバイスをありがとうございました。
試させていただきました。

ばっちりと思ったのですが・・・
ヲサヲサコスヲサーヲサヲサヲサュヲサアヲサ
ヲサヲサ
ヲサヲサヲサフヨアョロンョモヲサ
    ・・・
    ・・・
選択した青地の行がモヲサコスヲサヤになっていませんでした。
多くの方のサンプルを参考に改良してみます。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッアイッアキィ木ゥ アアコオイコーア  書込者ノト:ロ 「・「   ン

選択している行番号が゜に格納されていますので、
これを参照しないとだめです。
ですので、青地の行なのに、モヲサスヲサヤでないという、
変な感じなので注意が必要ですね・・・ィなのでお勧めは^^;ゥ。


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

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






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