这是您问题的另一个可能答案:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ComCtrls;
type
TForm1 = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
StatusBar1: TStatusBar;
procedure ListView1Changing(Sender: TObject; Item: TListItem;
Change: TItemChange; var AllowChange: Boolean);
procedure ListView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListView1Enter(Sender: TObject);
private
FListItem: TListItem;
procedure SelectedListItemStateSave;
procedure SelectedListItemStateRestore;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SelectedListItemStateRestore;
begin
ListView1.Selected := FListItem;
ListView1.Selected.Focused := True; // Always focused
end;
procedure TForm1.SelectedListItemStateSave;
begin
FListItem := ListView1.Selected;
end;
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
Change: TItemChange; var AllowChange: Boolean);
begin
if (Change=ctState) then
SelectedListItemStateSave;
end;
procedure TForm1.ListView1Enter(Sender: TObject);
begin
if ListView1.Selected = nil then
begin
FListItem :=ListView1.Items[0]; // Initialization
SelectedListItemStateRestore;
end;
end;
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ListView1.GetItemAt(X,Y) = nil then
begin
SelectedListItemStateRestore;
end;
end;
end.