Цитата:
Сообщение от kasimka
В этом вся проблема: а как выйти на соответствующую категорию? Найти нужную ноду, куда методом AddChild без проблем можно добавить?
|
Ноду получаем из того же массива ClassesNodes по индексу полученному функцией TryGetInt.
Цитата:
Сообщение от kasimka
Внешний цикл именно для этого.
|
Внешний цикл не нужен - TryGetInt вместо него
Цитата:
Сообщение от kasimka
Я пробовал писать в цикле for кучу условий, которые позволяют обойтись одним циклом, но их выходило слишком много и компилятор начинало тошнить (Ошибка Access Violation).
|

Ошибка Access Violation появляется не от того, что компилятор тошнит, а от того, что ты где-то делаешь неправомерное обращение к памяти.
Цитата:
Сообщение от kasimka
Выход может заключаться в предварительной сортировке данных в таблице: от 5 к 11, а затем все остальное (1-4 классов нет в таблице)...
|
Вот примерная реализация того о чём я писал (с моей функцией TryGetInt вместо внешнего цикла и без кучи условий):
Код:
procedure TMainForm.Button1Click(Sender: TObject);
var
ClassesNodes: array[5..12] of TTreeNode;
i, Int: Integer;
begin
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;
for i := 5 to 11 do ClassesNodes[i] := TreeView.Items.AddChild(nil, IntToStr(i) + ' классы');
ClassesNodes[12] := TreeView.Items.AddChild(nil, 'Другие классы');
for i := 1 to StringGridClasses.RowCount - 1 do
begin
if not TryGetInt(StringGridClasses.Cells[1, i], Int) or (Int < 5) or (Int > 12) then Int := 12;
TreeView.Items.AddChild(ClassesNodes[Int], StringGridClasses.Cells[1, i]);
end;
finally
TreeView.Items.EndUpdate;
end;
end;