Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2010, 17:04   #1
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию TObjectList. Проверить правильность использования

Создаю класс MyLand. Желаю поместить объекты данного класса в TObjectList , в связи с этим создаю новый класс TMyListLands наследник от TObjectList .
Вот модуль с этими двумя классами:
Код:
unit MyLand;

interface

uses Contnrs;

type
  TMyLand = class // класс для посевных полей
  private
    // Поля
    FActive: Boolean; //Активация поля
    FNumber: Integer; //Номер
    FName: string; //Имя поля
  public 
    procedure SetActive(const AActive: Boolean); //Активация поля

    constructor Create;
    destructor Destroy; override;

    property Active : Boolean read FActive; //Активация поля
    property Number : integer read FNumber write FNumber; //номер поля
    property Name : string read FName write FName; //имя поля

  end;

  TMyListLands = class(TObjectList) // класс для хранения данных типа TMyLand
  private
    function GetItems(Index: Integer): TMyLand;
    procedure SetItems(Index: Integer; const Value: TMyLand);
  published
    public
    property Items[Index: Integer]: TMyLand read GetItems write SetItems; default;
  end;

implementation

{ TMyLand }

constructor TMyLand.Create;
begin

end;

destructor TMyLand.Destroy;
begin

end;

procedure TMyLand.SetActive(const AActive: Boolean);
begin
  if Active <> AActive then // Если состояние изменяется
    FActive := AActive; // Сохранение состояния в поле
end;


{ TMyListLands }

function TMyListLands.GetItems(Index: Integer): TMyLand;
begin
  Result := TMyLand(inherited GetItem(Index));
end;

procedure TMyListLands.SetItems(Index: Integer; const Value: TMyLand);
begin
  inherited SetItem(Index, Value);
end;

end.
А вот модуль с использованием Списка объектов:
Код:
...
  private
    ListLands : TMyListLands;
    Land : TMyLand;
...
procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  ListLands := TMyListLands.Create(true);
  for i := 3 to 9 do begin
    Land := TMyLand.Create;
    ListLands.Add(Land);
    Land.Name := IntToStr(i);
  end;
end;
...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeAndNil(ListLands);
end;
...
C TObjectList работаю первый раз. Все компилируется и работает. Имена присваиваются объектам в списке, проверял с помощью BreakPoint. Так как компиляция прошла без ошибок и все получилсь с первого раза - возник вопрос - все ли я правильно делаю?

Единственное, что нашел:
Код:
Land : TMyLand;
Можно локально объявите в процедуре. Например:
Код:
...
  private
    ListLands : TMyListLands;
...
procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
  Land : TMyLand;
begin
  ListLands := TMyListLands.Create(true);
  for i := 3 to 9 do begin
    Land := TMyLand.Create;
    ListLands.Add(Land);
    Land.Name := IntToStr(i);
  end;
end;
...
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 05.07.2010 в 18:28.
Roof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DateEdit из Библиотеки RX. Как проверить правильность даты? Vit@L Компоненты Delphi 2 22.02.2010 11:11
Как проверить дескриптор (указатель) на правильность? TwiX Общие вопросы Delphi 11 13.02.2010 22:10
Дано число в двоичной системе счисления. Проверить правильность ввода этого числа isus Помощь студентам 2 29.11.2009 23:32
Нужно проверить на правильность программу Killdgedan Помощь студентам 3 26.05.2009 00:45
проверить правильность расстановки операторов begin и end Тёмка Помощь студентам 1 10.12.2007 13:07