![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Столкнулся со странной ошибкой. Пишу свой ТЕдит на базе ТКастомЭдит, перекрываю в протектедах ДефайнПропертиз. И вот в чём загвоздка - исполнение кода в тестовом проекте туда попросту не доходит, точнее, при загрузке приложения вообще ни для каких контролов кроме главной формы, ДефайнПропертиз не выполняется. В чём может быть загвоздка?
Это сообщение отредактировал(а) Proxin - 27.2.2016, 01:12 |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Вроде разобрался, но возникла следующая проблема. При использовании WriteComponent при последующем пользовании дизайнером ( сохранении формы с моим компонентом) вылетает ошибка out of memory. Код совершенно обычный
Это сообщение отредактировал(а) Proxin - 27.2.2016, 22:47 |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Опытным путём выяснилось, что ошибка - переполнение буфера после использования WriteComponent. Никто не сталкивался с этим?
|
|||
|
||||
| Doga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 20.12.2007 Где: Россия, Обнинск Репутация: нет Всего: нет |
Привет.
Когда CodeGear отказалась от справки в формате .HLP, надо сказать, ею(справкой) стало невозможно пользоваться, т.к. вместо справки получилось полное убожество(мягко говоря). Однако о TWriter.WriteComponent они(CodeGear) кое-что все же написали:
Отсюда и переполнение буфера. Как то так... |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
А как тогда быть, если я хочу сохранить в DFM TComponent, который не является публикуемым свойством ни одной компоненты?
|
|||
|
||||
| Doga |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 20.12.2007 Где: Россия, Обнинск Репутация: нет Всего: нет |
Не вижу ничего сложного.
Определяете методы для чтения и сохранения свойств компонента и с помощью DefineProperty(...) назначаете их для конкретного свойства. Например:
И в соответствующем файле DFM можно видеть следующие строки:
Кста, в догонку, Writer.Root тоже нельзя вызывать:
Вообще, как это делается, можно подсмотреть в исходниках Delphi или компонентах других разработчиков. Это сообщение отредактировал(а) Doga - 1.3.2016, 13:12 |
||||||
|
|||||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Это я знаю, что можно писать ручками все нужные значения. Но неужели нет способа вызывать WriteComponent? В статье про TReader/TWriter на этом форуме WriteComponent упоминаяется, и не стоит никаких предупреждений по его использованию.
Это сообщение отредактировал(а) Proxin - 1.3.2016, 14:26 |
|||
|
||||
| Doga |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 20.12.2007 Где: Россия, Обнинск Репутация: нет Всего: нет |
Да, хорошая статья - http://forum.vingrad.ru/forum/topic-250409...iter/index.html
Отличная наглядная иллюстрация, прекрасно объясняет как это работает. Конечно, никто не может помешать нам создать свои собственные локальные Reader, Writer и в режиме RunTime сохранять компоненты в свои собственные файлы или загружать компоненты из них. Но для реализации возможности сохранения свойств в DFM, я считаю, необходимо соблюдать соответствующие правила. Все визуальные компоненты сами умеют сохранять/читать свои свойства. Надо только предоставить им такую возможность. Хотелось бы разобраться в концепции Вашего компонента и увидеть полный код методов используемых для чтения/записи свойств. Кста, больше чем на три кнопки в составе Edit'а, меня не хватило |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
В общем, стандартный TReader/TWiriter - не подходит. Если хотите всамделишные кнопки - энамьте все бублики через ртти и пишите в бинарную дату, потом парсьте её в ридере, с созданием компонента по имени класса и прочим фабричным весельем. Я удивлён, как вообще они стандартный TToolBar писали. Могли бы для себя добавить нормальную работу в дизайне.
А в компоненте у меня ничего сложного - два тулбара class(TWinControl) и хук на ресайз эдита. Кнопки храню с помощью TList, сам пишу, сам читаю. Потому что коллекциями это реализовывать - грабли через грабли. Это сообщение отредактировал(а) Proxin - 1.3.2016, 20:54 |
|||
|
||||
| dnek |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 1.4.2013 Репутация: нет Всего: нет |
А директивы stored для свойства Вам не хватает? Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |