掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ListViewでの複数行選択をマウスドラッグで実現するには? (ID:15231)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ン?ン?さんありがとうございました! 無事解決です。 マウスの速度をあげると選択範囲に歯抜けがでちゃったので 以下のように変更してみました。(かなり強引です。すみません。) var IsMouseDown: Boolean; Yd,Ymax,Ymin:integer; procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Yd:=ListView1.GetItemAt(X,Y).Index; Ymax:=Yd; Ymin:=Yd; IsMouseDown := True; end; procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IsMouseDown := False; end; procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var aItem:TListItem; i:integer; Yst,Yed:Integer; begin aItem:=ListView1.GetItemAt(X,Y); if aItem<>nil then begin if IsMouseDown then begin if (Ymax<aItem.Index) then Ymax:=aItem.Index;//範囲の最大値 if (Ymin>aItem.Index) then Ymin:=aItem.Index;//範囲の最小値 //ドラッグ開始位置と現在カーソル位置による判定 if Yd<=aItem.Index then begin Yst:=Yd; Yed:=aItem.Index; end else begin Yst:=aItem.Index; Yed:=Yd; end; //範囲全体の選択を解除する。 for i:=Ymax downto Ymin do begin ListView1.Items[i].Selected:=False; end; //判定内を選択する。 for i:=Yed downto Yst do begin ListView1.Items[i].Selected:=True; end; end; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.