Creo que no hay necesidad de recorrer todos los elementos cada vez:
Código Delphi
[-]
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
Index: Integer;
Item: String;
begin
Index := CheckListBox1.ItemIndex;
Item := CheckListBox1.Items[Index];
if CheckListBox1.Checked[Index] then
ListBox1.Items.Add(Item)
else
begin
Index := ListBox1.Items.IndexOf(Item);
ListBox1.Items.Delete(Index);
end;
end;
En este ejemplo, el listbox contendrá los elementos del checklistbx que estén marcados.
// Saludos