Du kunne gemme listbox'ens ItemIndex i en midlertidig variabel imens din listbox opdateres. Alternativt kunne du gemme navnet på den aktie der er markeret i en midlertidig variabel, og så lave en lille rutine der, efter at listboxen er opdateret, marker den linie der indeholder det gemte navn.
Det var faktisk sjovt at lege med. Jeg har ikke din beregning, men den kan du lave som du vil - og med alle de faktorer du har lyst - se koden nedenfor.
Jeg har lavet det med et associeret objekt på stringlisten i listboksen. Det objekt kender til "alt" om de beregninger du skal bruge (når du selv lige retter dem til - for jeg har ikke de beregninger :) )
procedure TForm1.Button2Click(Sender: TObject); var i: integer; stock: TStock; begin // Calc new for i := 0 to Listbox1.Items.count -1 do begin stock := Listbox1.Items.Objects[i] as TStock; stock.Factor := 1.30; // find en ny værdi fra et eller andet sted - måske fra en liste stock.calculate; // beregn værdi ud fra ny faktor (lav din egen beregning der) stock.Selected := Listbox1.Selected[i]; // save selected value Listbox1.Items.Delete(i); // delete old entry Listbox1.Items.InsertObject(i, stock.Stockname + ': ' + FloatToStr(stock.Basevalue), stock); // put it back Listbox1.Selected[i] := stock.Selected; // restore selected value end; end;
procedure TStock.calculate; begin FBaseValue := FBaseValue * FFactor; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.