Показать сообщение отдельно
  #4  
Старый 09.04.2014, 22:17
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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;
Ответить с цитированием