基本的には、ListView に StringList を設定したいのですが、ListItem を選択して Up または Down を押すと、アイテムが上下に移動します (両方のリストで)。
ListView の onKeyDown を使用して MoverFAT を呼び出しています
procedure TF_Aplicador.ListViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ListView.Selected <> nil then
if Key = VK_UP then
MoverFAT(ListView.Selected.Index, -1)
else if Key = VK_DOWN then
MoverFAT(ListView.Selected.Index, 1)
else if Key = VK_DELETE then
DeletarFAT(ListView.Selected.Index);
end;
そして問題は、下に移動すると常に最初のアイテムが選択され(アイテムを交換した後)、上に移動すると問題なく動作することです。FATs は私の StringList であり、Atualizar() は ListView に StringList の内容を表示させるだけです。
procedure TF_Aplicador.MoverFAT(I, J: Integer);
begin
if ((I + J) > -1) and ((I + J) < (FATs.Count)) then
begin
FATs.Exchange(I, I+J);
Atualizar;
ListView.Selected := ListView.Items[I+J];
end;
end;