Иногда помогает разделить проект на два и реже возвращаться к глючащим задачам.
Нашёл в хрестоматии
[more=работа с деревом]
Код: [no]
unit TreeForm;
...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TreeView1.SaveToFile (
ExtractFilePath (Application.ExeName) + 'TreeText.txt');
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TreeView1.BeginDrag (False);
end;
procedure TForm1.ExpandAll1Click(Sender: TObject);
begin
// either:
TreeView1.FullExpand;
// or:
// TreeView1.Items [0].Expand(True);
end;
end.
[/no]
Нашёл в хрестоматии
[more=работа с деревом]
Код: [no]
unit TreeForm;
...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TreeView1.SaveToFile (
ExtractFilePath (Application.ExeName) + 'TreeText.txt');
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TreeView1.BeginDrag (False);
end;
procedure TForm1.ExpandAll1Click(Sender: TObject);
begin
// either:
TreeView1.FullExpand;
// or:
// TreeView1.Items [0].Expand(True);
end;
end.
[/no]

. При повторном выходе функция StrToFloat уже не может корректно перевести строку '1 000 000' в вещественное значение. Выход вижу в следующем: хранить редактируемое в Edit значение в отдельной переменной и при заходе в Edit на событие OnExit восстанавливать из него значение для Edit.Text. Ну примерно так:
Но с помощью этих штук 99% багов любого проекта можно прибить и за триальный период.
проблема не в том была.. сначала удаляем ветку которую бум восстанавливать, затем создаем все разделы, а уж тока потом RestoreKey(sKey, filename); 