It's doable. You will need to maintain an array of all the lines. When you add a new line, insert it at the beginning of this array. Then, you will need to loop through each element of the listbox (preferrably in reverse) and set the colors to those of the element above it. When you do this, use the "Defer panel updates" property to increase the speed of this operation. Set it to true, loop through the listbox changing colors, then set it back to false.
If this isn't very important, adding the elements to the end will be much simpler. You won't need to insert elements into the front of an array, and you won't have to loop through each element in the listbox every time you add something.
As far as a better control to accomplish this, I'm not sure. Tables, trees, listboxes all have string arrays containing the element names and properties of each cell that don't correspond with each other. Adding elements doesn't preserve the association of the text of a cell with its color characteristics.