Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хитрое свойство


Apollon_604 ©   (2006-07-03 16:55:00) 

Привет. Вопрос, по-моему, достаточно тривиальный, но как-то у меня не получается его решить.
Итак, есть тип:


type
 TMLogLayer =  record
   Name:     String;
   Visible:  Boolean;
 end;


есть поле:


 private
   fLayers: array[0..1] of TMLogLayer;


необходимо описать свойство для доступа к этому полю:


 public
   property Layers[AIndex: Word]: TMLogLayers read GetLayers write ???;


так, чтобы можно было написать, например


 MyForm.Layers[0].Visible := True;

Как должна выглядеть процедура для записи?
И можно ли решить этот вопрос каким-либо другим методом (например, с помощью указателей)?


ЮЮ   (2006-07-04 03:13:00) [1]

public
 property LayerName[AIndex: Word]: string ...
 property IsLayerVisible[AIndex: Word]: boolean ...


Джо   (2006-07-03 18:22:00) [2]

Ну, еще можно предложить сделать TMLogLayer классом. Если это подходит, конечно.


MBo   (2006-07-03 17:45:00) [3]

>Вот в этом-то все и дело... :(((
Два отдельных свойства не нравится?


Apollon_604   (2006-07-03 17:42:00) [4]


> SetLayers позволит устанавливать только запись целиком.
> Для доступа к отдельному полю на чтение работает GetLayers,
>  а вот записать поле так не выйдет.


Вот в этом-то все и дело... :(((


MBo   (2006-07-03 17:32:00) [5]

SetLayers позволит устанавливать только запись целиком. Для доступа к отдельному полю на чтение работает GetLayers, а вот записать поле так не выйдет. Возможно, стоит сделать два отдельных индексированных свойства  для полей


Apollon_604   (2006-07-03 17:27:00) [6]


> Как процедура с одним целочисленным параметром.


А в теле что должно быть?


Reindeer Moss Eater   (2006-07-03 17:24:00) [7]

Как процедура с одним целочисленным параметром.


Apollon_604   (2006-07-03 17:18:00) [8]

Она-то делает... Как должна выглядеть процедура SetLayers?


Плохиш   (2006-07-03 17:11:00) [9]

Фу, блин, не так прочитал :-(

function TForm1.GetLayers(AIndex: Word): TMLogLayer;
begin
 Result := fLayers[AIndex];
end;


Разве не делает то что надо?


Плохиш   (2006-07-03 17:05:00) [10]


>  public
>    property Layers[AIndex: Word]: TMLogLayers read GetLayers write SetLayers;

Потом жмёшь Shft+Ctr+C и радуешься результату


Наверх

Титульная страница Поиск, карта сайта Написать письмо