TListViewをVirtual形式で利用したい


Macro難  2009-05-18 18:10:33  No: 34449

Delphi2007でTListViewを使用したアプリを作成しています。

TListViewをVirtual形式で利用したいため
OwnerDataプロパティをTrueにすると、
マウスで範囲選択する場合に問題が発生しました。

次のようにアイコンが表示されている場合に、
アイコン上下間を始点にする範囲選択は可能なのですが
アイコン左右間を始点にしようとすると範囲選択ができません。

□ | □ | □ | □
-----------------
□ | □ | □ | □
-----------------
□ | □ | □ | □

OwnerDataプロパティがFalseの場合はどちらの場合も範囲選択可能です。
MultiselectはTrueにしており、描画はCustomDrawItemで行っています。

この現象についての対処法や、Virtual形式で利用する場合に
注意するべき点等ありましたら教えていただけないでしょうか。

よろしくお願いします。


monaa  2009-05-25 01:31:51  No: 34450

D2009,Vistaでチェックしましたが
現象は再現できませんでした。


Macro難  2009-05-25 17:19:02  No: 34451

検証ありがとうございます。

Delphi2007の場合はVista,XPでも現象が出ます。
かなり古いですが手元にあるDelphi5でも同じ現象が出ました。

Delphi2009は手元にないのでトライアル版をインストールして
検証してみようと思います。


monaa  2009-05-25 21:26:15  No: 34452

それも一つの手ですが、
先に最小コードで実験してみることをお勧めします。
たぶん他の箇所に誤りがあるのではないでしょうか?
私の確認用ソース

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.


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

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






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