DELPHI. DBTreeView своими руками. Третья волна

Введение

И вот она, третья, волна! Я никогда ранее  не разрабатывал компоненты, и скажу, что опыт это крайне ценный для становления Delphi программиста. Многие вещи соединяются в голове и весь наработанный ранее опыт играет свою роль. Я работал над DBTreeView примерно месяц. Много всяких сложностей и нюансов было и вместе с тем, я чувствовал, что рос, когда решал сложные для себя задачи. Это очень интересный опыт. Всего у меня было 3 волны разработки. То, что сделано  сейчас, не идеально, но оно работает.

Написать DBTreeView, который бы подходил для всех баз данных можно, но это крайне трудоемкая задача, и мне на данный момент она не нужна. Я писал под MySQL, так как плотно работаю с этой базой сейчас. Но для того, чтобы Вы могли написать своё дерево, оттолкнувшись от моего кода, например, хочу сделать серию статей по разработке DBTreeView под MySQL. Умные люди смогут провести аналогию и сделать, если это им необходимо компонент под себя.

Также, конечно есть и готовые компоненты от DevExpress или ehLib, но первые непомерно дороги, вторые, выглядят слишком примитивно. Ну и возможность добавить свой функционал в ядро дерева конечно на порядок меньше, если пользуешься готовыми компонентами.

Для меня разработка DBTreeView под MySQL была прежде всего испытанием и тренировкой в программировании. Итак, по шагам. После первой и второй волны, вот что у меня получилось на третьей, текущей волне разработки компонента.

3

Это тестовая программа. Она создана для демонстрации возможностей компонента. Основные особенности – динамическая подгрузка веточек для ускорения работы с большими деревьями, добавлен модуль dmActionManager, для упрощения подключения к проекту, ну и другие мелочи жизни. 


Структура иерархической таблицы MySQL

Здесь я копирую информацию из поста второй волны. Структура таблицы не изменилась.

Структура таблицы выглядит примерно следующим образом. Поля таблицы можно называть как угодно, главное их потом корректно отразить в ObjectInspector компонента DBTreeView в разделе DBTreeViewTable. Аналогично с базой данных – настроить её значения можно в разделе компонента DBTreeViewConnParams.

Если нужно добавить какие-то поля, то, чтобы не лезть во внутренности компонента, можно сделать им значения по умолчанию NULL, либо, если это невозможно – поправить модуль SQLQueries.

2

3

Если поменять имена полей, например так…

4

 

,то тоже будет работать.


ObjectInspector

5

6


Ограничения

База данных MySQL.

Среда разработки. Я разрабатывал в Delphi Seattle, также должно работать и в XE8, в XE7 не будет работать, так как там отсутствует ImageList, который я использовал.


Файлы для скачивания

Скачать файлы DBTreeView (3 волна)


Структура файлов

4


Инструкция по установке, использованию

***************************
* Panteleevstas@gmail.com
* DBTreeView, май 2016
* elGringo *
***************************
1. Распакуйте архив в любое место на диске, например, на рабочий стол, у меня это выглядит так
C:\Users\YellowFriend\Desktop\DBTreeView 0.1

***************************************************

2.Откройте Delphi > Tools > Options > Enviroment Variables > Найдите кнопку New, в правом нижнем углу,
нажмите и добавьте новую переменную
В поле VariableName впишите DBTreeView
В поле Variable Value впишите C:\Users\YellowFriend\Desktop\DBTreeView 0.1
Это поможет Delphi искать все необходимые юниты, которые я использовал для программирования DBTreeView

*****************************************************

3.В папке DataBaseMySQL найдите дамп базы данных DbtreeViewDump.sql
Восстановите из дампа базу данных treeview_db;

******************************************************

4. Перейдите снова в Delphi. Нажмите, File | Open
В папке DBTreeViewBPL откройте файл DBTreeViewPackage.dproj

Откройте ProjectManager и нажмите правой клавишей мыши на
DBTreeViewPackageBPL и далее, в контекстном меню, нажмите Install

*******************************************************

5.Добавьте в проектную группу TestingProgram.dproj из папки TestingProgram.dproj

Скомпилируйте и запустите проект в 1 раз. Вылезет ошибка о том, что файл libmysql.dll не найден
Но! Создастся, например папка Win32\DEBUG если в DEBUG режиме

Возьмите файл libmysql.dll из папки FilesRequired и положите его в папку с EXE

Скомпилируйте и запустите проект во 2 раз и тестируйте возможности DBTreeView;

**********************************************************

6. Подключать можно через dmActionManager, предварительно создав его копию, либо же просто при помощи public методов компонента.

**********************************************************

Чтобы поменять базу данных и таблицу и поля таблицы, используйте свойства DBTreeView

-DBTreeViewConnParams
-DBTreeViewTable

Вводите данные аккуратно, компонент пока не может распознавать правильность до запуска программы.
Если что-то будет введено неправильно – при тестировании не будет работать одна из функций.


Как подключить к своему проекту?

В папке DBTreeViewBPL

Скопировать файлы udmActionManager.pas и udmActionManager.dfm в папку своего проекта и подключить через свойство Action,

5

 

Но этот способ у меня периодически глючил, думаю более железный вариант это напрямую, через паблик методы компонента

 

Основные Public методы компонента

Пример подключения из проекта


Особенности

Первая

Необходимо очищать память под указателями снаружи. Например так…

Пока не доделал этот момент так как столкнулся с глюком.

Вторая

Файл libmysql.dll должен находиться рядом с EXE файлом, иначе пока не получается. Хотя я сделал в ObjectInspector свойство для заполнения пути и все внутри корректно реализовал, по непонятным мне причинам библиотека не ищется. Но думаю поправлю чуть позже.

Третья

Дерево использует динамическую загрузку узлов. При каждом Expanding загружается только одна ветвь. Это немного ускоряет работу дерева. Реализована так называемая динамическая подгрузка веточек.

Далее будет небольшая серия статей по функционалу дерева в более менее законченном варианте.

 

This entry was posted in Delphi, Компонентостроение. Bookmark the permalink.

Leave a Reply