C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
XML сериализация VCL обьектов, Автосохранение/загрузка свойств.
klen
  Отправлено: 20.03.2004, 14:16


Машинист паровоза

Группа: Участник
Сообщений: 239



Здраствуйте.
Мужики, кто-то тут про сохранение TTreeView в XML спрашивал, у меня горово решение( в 5 утра закончил smile.gif )

Написал компонент который сбрасывает и подымает опубликованные свойства в XML файл , чтото типа RXLib::TPropStorage, только в XML а не в реестр и ini.

Умеет Сохранять свойства, методы, интерфейсы .... все что опубликовано.

Если свойство типа класс, то сохранятся TStrings , TTreeNodes, TComponent, TPicture(c картинкой естественно), TFont.
Далее расширятся список сохраняеймых классовыхсойств будет по еобходимости.

Компонент потоко-безопасный, доступ к единственному файлу может быть произведен как с разных потоков, так и с разных процессов. т.к организован эксклюзивный доступ на запись и чтение (тут еще потестировать нада и подумать, на счет "один пишет — все читают", щас реализовано "один пишет или читает").

Что то похожее в библиотеке GlobusLib, но у мня рискну сказать более законченный компонент, и побыстрее, XML парсер другой, из xmlrtl.lib (физически парсер реализован как COM сервер в msxml.dll, идет в стандартной поставке начиная с Win98. на конце может отличатся цыфрой — уменя например msxml3.dll )подцепил. Можно ваще кода не писать, в редакторе компонента настроил че нада сохранять и все, далее все автоматически.

Уже три примера написал для людей. smile.gif

Если интересует проблема то пишите.

Мне бы хотелость чтоб ктото протестировал, с пользой для решения своих проблем конечно, выразил пожелания, мигом перепишу, если время позволит.

И статейку можно написать по этой теме и выложить на сайте если админы позволят.

Отредактировано klen — 20/03/2004, 17:01
.piero
  Отправлено: 21.03.2004, 21:01


Дежурный стрелочник

Группа: Участник
Сообщений: 62



klen, а твоё чадо с цветами не глючит, а то пытался на днях сохранить цвет в реестр, а он мол говорит что так вообще делать нельзя, а в факах носом тыкают: пиши класс, суй в него цвета и ... мне аж перехотелось.

если оно такое умеет, то кинь, пожалуйста на cru_kgb@mail.ru.

Зараннее благодарен.

люблю таких людей хороших.

Be Linux... ...use Windows!
klen
Отправлено: 22.03.2004, 01:40


Машинист паровоза

Группа: Участник
Сообщений: 239



У мнас в "Греции" c цветом ничего не глючит... просто мы его не включаем. Шутка.

А если глючит то исправим

Вроде работает. Почты у меня нет, отослать не могу, положу сюда исходники. Хелп еще не писал, два раза тыкнешь на компонент откроется редактор компонента, там все должно быть понятно.
Специально для тебя в директории Demo\Memo пример с сохранением цвета шрифтов этого самого мемо.

Кстати, еще дописал кусок, теперь еще и меню хранить можно, в этом же примере меню сохраняеся с предыдущими путями файлов, "Reopen" типа. Короче все дерево TMenuItem сохраняется.

А с цветом чето тебя грузят — три байта и в африке 3 байта, причем тут класс?

Распакуй архив , установи пакет с компонентами KlenToolLib.bpk, затем пакет с редактором компонена KlenToolLibEd.bpk должно появится на палитре. Там примерчики есть посмотри их.

Отредактировано klen — 22/03/2004, 02:51

User Attached Image Скачать файл
KlenToolsLib.zip


klen
Отправлено: 22.03.2004, 02:43


Машинист паровоза

Группа: Участник
Сообщений: 239



Вот тебе чучуть исправленая версия, цвет хранится ввиде числа :

CODE

TColor is used to specify the color of an object.

Unit
Graphics

enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};


Я ничего не выдумывал, как есть так и пишется в хмл.
Новый примерчик еще про цвет. Могу сделать чтоб цвет в шестнадцетеричном виде храниля, чтоб в хмл правит его легче было.

Отредактировано klen — 22/03/2004, 11:20

User Attached Image Скачать файл
KlenToolsLib_v0.1.131.zip


klen
Отправлено: 25.03.2004, 14:57


Машинист паровоза

Группа: Участник
Сообщений: 239



Я ещо напильником поработал.
Исправил баги:
цвет теперь сохраняется в виде символических констант(clRed например), если соответствующей константы нет то в виде HEX
при инициализации дерева меню из XML
теперь методы сохраняются правильно (есть пример на это дело)
при загрузке свойства типа компонент если оно было равно NULL
исправлена ошибка порядка сохранения списка сохраняемых свойств.

Теперь сохраняется еще и TMenuItems, все дерево, как узлы в TReeNodes.

Если комунибудь этот компонент нужен — пишите, далее вышлю обновленную версию. Каждый день дописываю.

Отредактировано klen — 25/03/2004, 16:08

User Attached Image Скачать файл
KlenToolsLib_v0.2.097.zip



Вернуться в Вопросы программирования в C++Builder