Delphi2007でTListViewを使用したアプリを作成しています。
TListViewをVirtual形式で利用したいため
OwnerDataプロパティをTrueにすると、
マウスで範囲選択する場合に問題が発生しました。
次のようにアイコンが表示されている場合に、
アイコン上下間を始点にする範囲選択は可能なのですが
アイコン左右間を始点にしようとすると範囲選択ができません。
□ | □ | □ | □
-----------------
□ | □ | □ | □
-----------------
□ | □ | □ | □
OwnerDataプロパティがFalseの場合はどちらの場合も範囲選択可能です。
MultiselectはTrueにしており、描画はCustomDrawItemで行っています。
この現象についての対処法や、Virtual形式で利用する場合に
注意するべき点等ありましたら教えていただけないでしょうか。
よろしくお願いします。
D2009,Vistaでチェックしましたが
現象は再現できませんでした。
検証ありがとうございます。
Delphi2007の場合はVista,XPでも現象が出ます。
かなり古いですが手元にあるDelphi5でも同じ現象が出ました。
Delphi2009は手元にないのでトライアル版をインストールして
検証してみようと思います。
それも一つの手ですが、
先に最小コードで実験してみることをお勧めします。
たぶん他の箇所に誤りがあるのではないでしょうか?
私の確認用ソース
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
procedure ListView1Data(Sender: TObject; Item: TListItem);
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.DoubleBuffered:=TRUE; //for vista
ListView1.MultiSelect := TRUE;
ListView1.OwnerData :=TRUE;
ListView1.Items.Count := 200;
ListView1.OnData := ListView1Data;
end;
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
Item.Caption := IntToStr(Item.Index);
end;
end.
ツイート | ![]() |