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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2014, 19:24   #1
Skirmy
Новичок
Джуниор
 
Регистрация: 10.07.2010
Сообщений: 2
По умолчанию Объясните реализацию TMemo.Lines

Здравствуйте!

Глупый, конечно, вопрос, но совершенно не понимаю, как формулировать запрос в гугле, чтобы найти что-то дельное.

Если вкратце, то я никогда не понимал схему, по которой TMemo.Lines, имеющий, по идее, тип TStrings, возвращает как массив строк (например, так: Memo1.Lines[0]), так и объект с методами (Memo1.Lines.Add -- метод!).

Пытался читать исходники встроенных библиотек, потонул в объемах кода, ничего не поняв FAQ ваш тоже читал, там про ООП почти ничего.

У меня тут просто возникла необходимость сделать аналогичную реализацию в своем классе. Помогите, пожалуйста.

/edit Я был очень невнимателен при чтении исходников VCL.

Код:
    property Items[Index: Integer]: Pointer read Get write Put; default;
Похоже, что достаточно написать волшебное слово deafult перед нужным проперти и всё заработает. Если всё так, то помощь больше не нужна пошёл тестить.

Последний раз редактировалось Skirmy; 08.11.2014 в 19:38.
Skirmy вне форума Ответить с цитированием
Старый 08.11.2014, 19:44   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Memo1.Lines[0]
эквивалентно Memo1.Lines.Strings[0], т.к. это свойство default (по умолчанию).
Изображения
Тип файла: jpg 1.jpg (54.4 Кб, 133 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.11.2014, 19:50   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

На самом деле там TMemoStrings, наследник TStrings. Сам TStrings абстрактный класс
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.11.2014, 20:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Похоже, что достаточно написать волшебное слово deafult перед нужным проперти и всё заработает.
Слово default говорит о том, что именно это свойство будет иметься ввиду, если обратиться к компоненту как к массиву. Как выше сказали это делается для удобства, если компонент содержит некий массив и поле доступа к нему чтоб лишний раз не писать много слов можно указать какое из свойств будет иметься ввиду, если к компоненту или полю обращаться.

Пример:
Код:
program Project1;

type

  { c }

  c=class
    private
      a:array[1..5] of string;     //Опишем внутри класса некий массив
      function GetItem(i: integer): string;
      procedure SetItem(i: integer; AValue: string);
    public
      // И свойство, которое будет по умолчанию иметься ввиду
      property Item[i:integer]:string read GetItem write SetItem; default;
  end;

{ c }

function c.GetItem(i: integer): string;
begin
  Result:=a[i];
end;

procedure c.SetItem(i: integer; AValue: string);
begin
 a[i]:=AValue;
end;

var
  q:c;
begin
  q:=c.Create();
  // Сам объект превращается в массив, хотя настоящая его форма такова: q.item[i]:=...
  //Но для удобства поскольку item обьявлен дефолтом его можно не писать.
  // Компилятор и так поймет что если никакое из свойств не написано - нужно брать
  // дефолтовое
  q[3]:='123';
  write(q[3]);
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2014, 09:57   #5
Skirmy
Новичок
Джуниор
 
Регистрация: 10.07.2010
Сообщений: 2
По умолчанию

Благодарю вас за ответы, уже разобрался самостоятельно, но, возможно, этот тред будет полезен кому-то ещё
Skirmy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
легкая задача на реализацию videolord Общие вопросы C/C++ 4 18.12.2011 16:02
TMemo.Lines.Objects flexterful Компоненты Delphi 6 05.05.2011 15:01
Вопрос про реализацию справки zxspec Помощь студентам 4 16.08.2009 04:02
реализацию md2 на C# _real_ Общие вопросы C/C++ 5 22.06.2009 10:26