|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.02.2014, 07:38 | #1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
Прикол. Свойство Cells
Господа, хочу поделиться с вами приколом, который недавно обнаружил...
у меня есть свой компонент для работы с табличными данными. ну и ключевой функционал в нем - организация сетки (grid) и доступа к ее ячейкам посредством свойства Cells[x,y] (как в TStringGrid) + реализована возможность доступа к столбу по его названию. описание класса вот такое: Код:
ну и соответственно работа с ним: A:=TA.Create; A.Cells[0,0]:='text'; A.Cells['col',1]:='name'; и т.д. в принципе тут все понятно, но случайно обнаружил, что работает и такая запись: A[0,0]:='text'; (!) Меня мучает вопрос - почему?? Что это за прикол такой? Почему с объектом класса можно работать как с массивом? Причем корректно работать! )) у меня есть только одно предположение - это из-за свойства Cells: стандартное название, возможно компилятор его как-то по-особому воспринимает? в Delphi 10 Lite открываются все новые и новые чудеса... |
18.02.2014, 08:00 | #2 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
напишу это отдельным постом
Я понял в чем прикол! Провел эксперименты с TStringGrid и другими своими классами, где есть Cells - нигде не прокатило. Тогда я подумал, что возможно дело в массиве строк: FCells:array of array of string; - тоже нет... но вот когда я создал свой класс и расписал там процедуру и свойство - все заработало. оказывается, что дело в default. получается что default дает возможность обращаться к свойству без написания его названия... это объясняет то, что нельзя сделать 2 default-свойства в одном классе... а вообще я default указывал для того, чтобы сделать два одинаковых по сути свойства, но для работы с разными параметрами (аналог overload для процедур) |
18.02.2014, 10:26 | #3 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
ровно потому TStrings можно обрабатывать как массив. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
18.02.2014, 10:39 | #4 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
Пепел Феникса, не совсем от балды...
меня сильно интересовал вопрос перегрузки свойств, я вроде и тему на форуме создавал соответствующую, и по инету гуглил, и инфу всякую читал про default и другие директивы. меня интересовала именно перегрузка, а не default. поэтому поняв что default для этого не предназначен, я не стал в него особо вникать. но тем временем, вопрос перегрузки свойств оставался открытым. к сожалению я так и не нашел "легальных" способов сделать это, поэтому в итоге сделал через жопу - хоть default для этого не предназначен, но с ним все работает. |
18.02.2014, 10:54 | #5 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Супер прикол | ProgMaster | Общие вопросы Delphi | 2 | 15.12.2011 17:38 |
Что за прикол? | Gerb22 | О форуме и сайтах клуба | 1 | 17.11.2009 20:48 |
Нестандартное использование Cells.FormulaR1C1 и Cells.Text | Lokkie | Microsoft Office Excel | 3 | 21.01.2009 17:41 |
Прикол с TClientSocket | Avel | Работа с сетью в Delphi | 1 | 27.11.2008 22:48 |