Hi, ich hab mir für dieses Problem folgende Prozedur geschrieben:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure MoveSelectedItem(ListView: TListView; MoveUp: Boolean); var Item: TListItem; begin with ListView do begin if MoveUp and (Selected.Index > 0) or not MoveUp and (Selected.Index < Pred(Items.Count)) then begin if MoveUp then Item := Items.Insert(Selected.Index-1) else Item := Items.Insert(Selected.Index+2); Item.Assign(Selected); Selected.Delete; Item.Selected := True; Selected.Focused := True; Selected.MakeVisible(False); end; SetFocus; end; end; |
Du definierst einfach eine einzige OnClick-Ereignis-Prozedur, in der Du dann MoveSelectedItem() wie folgt aufrufst:
Quelltext
1:
| MoveSelectedItem(ListViewactiveCodecs, Sender=ButtonUpClick); |
Die Prozedur MoveSelectedItem() hat gegenüber Deiner Methode folgende Vorteile:
a) Es findet eine Bereichsüberprüfung vor der Aktion statt (also keine Fehlermeldungen)
b) Die Selektion und der Focus werden entsprechend mit verschoben.
c) Es wird dafür gesorgt, daß nach dem Verschieben das selektierte Item immer sichtbar ist.
Ich hoffe, das hilft Dir bei Deinem Projekt ein wenig weiter.
Grüße