По поводу добавления до и после.
Суть такая. Тебе надо найти нужный узел, видимо, по данным (тут есть еще вариант для упрощения - хранить готовые ссылки в итемах листбокса).
Ну и само добавление:
Код:
procedure AddItemAfter(node : PLinkNode; newNode : PLinkNode);
begin
newNode.next := node.Next;
newNode.prev := node;
node.Next := newNode;
end;
procedure AddItemBefore(node : PLinkNode; newNode : PLinkNode);
begin
AddItemAfter(node.Prev,newNode);
end;
Здесь нет проверки на добавление перед первым и после последнего элементов, но там просто, сам сделаешь.