Показать сообщение отдельно
  #5  
Старый 12.01.2012, 01:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Грузить надо через промежуточный список. Сначала грузишь в список, потом формируешь объект, а в ListBox добавляешь через AddObject и привязываешь этот объект к итему в списке.

Код:
type
  TMyObject = class
     Name : Stirng;
     I1, I2, I3, I4 : Integer;
   end;

function TForm1.GetObject(AStr : String) : TMyObject;
begin
  Result := TMyObject.Create;
  // Тут парсим строку и заполняем поля объекта
end;

procedure TForm1.ClearListBox;
var
  I : Integer;
  O : TMyObject;
begin
  For I := 0 To ListBox1.Items.Count-1 Do
    Begin
      O := ListBox1.Items.Objects[i];
      ListBox1.Items.Objects[i] := Nil;
      O.Free;
    End;
  ListBox1.Items.Clear;
end;

procedure TForm1.Load(AFileName : String);
var
  I : Integer;
  S : TSTringList;  
  O : TMyObject;
begin
  ClearListBox;
  S := TStringList.Create;
  S.LoadFromFile(AFileName);

  For I := 0 To S.Count-1 Do
    Begin
      O := GetObject(S[i]);
      ListBox1.Items.AddObject(O.Name,O);
    End;
    
  S.Free;
end;

procedure TForm1.ListBoxClick(Sender : TObject);
var
  O : TMyObject;
begin
  If ListBox1.ItemIndex > -1 Then
    Begin
      O := ListBox1.Items.Objects[ListBox1.ItemIndex] As TMyObject;
      Edit1.Text := IntToStr(O.I1);
      Edit2.Text := IntToStr(O.I2);
      Edit3.Text := IntToStr(O.I3);
      Edit4.Text := IntToStr(O.I4);
    End;
end;

Первые 2 функции - служебные.
Следующая - загрузка файла.
Последняя - вывод данных в edit'ы.
Ответить с цитированием