-
MY PROJECTS
-
Recent Posts
- Algo.Java.BitmaskForEvens
- Algo.Java.MonotonicStack
- Java.Algo.Arrays.SeparateDigits
- Algo.Java.Arrays.Intersection
- Algo.Java.Arrays.PriorityQueue
- Algo.Java.DFS.BST.CollectNodesByDepth
- Algo.Java.GetAllSubArrays
- Algo.Java.Dfs.Backtracking
- Algo.Java.IsSameTree
- Algo.Java.DFS.Postorder
- Algo.Java.Arrays.Strings.FrequencyApproach
- Algo.Java.DFS.Theory
- Java.Algo.DFSExample
- Algo.Java.Xor to find difference between strings
- Java.Algo.AllSubArrays
- Linux. Ubuntu.Monitor resources
- Java.Algo.Get sum of Digits from int
-
Java. List
to int[] and backwards - Sql.Execution Order
- Algo.Java.BinarySearch
Categories
- Aptana
- Azure
- C#
- DataSnap
- DBExpress
- Delphi
- Delphi и сети
- Delphi. Язык программирования
- ExtJS
- FastReport
- FireDAC
- FireMonkey
- GIT
- ICS
- IDE
- IIS
- Indy
- InnoSetup
- javascript
- jQuery
- JSON
- LiveBindings
- MSHTML
- MySQL
- PHP
- REST
- Ribbons
- SMS
- SQL инструкции
- SVN
- TRichView
- UniGui
- WebBroker
- WinAPI
- Windows
- Алгоритмы
- Без рубрики
- Деревья
- Ищу ответ
- Компонентостроение
- Мои компоненты
- Начальный уровень
- Обработка исключений
- Парсинг
- Потоки(Threads)
- Регулярные выражения
- Тестирование приложений
Category Archives: Компонентостроение
Delphi. DBTreeView. Загрузка картинок проекта из ресурсов
Добавляем ресурсы в проект Project > Resources and Images Модуль загрузки из ресурсов
Posted in Delphi, Компонентостроение
Comments Off on Delphi. DBTreeView. Загрузка картинок проекта из ресурсов
Delphi.DBTreeView своими руками.Прорисовка картинок папок и файлов
В событии CustomTreeDraw делаем следующее
Posted in Delphi, Компонентостроение
Comments Off on Delphi.DBTreeView своими руками.Прорисовка картинок папок и файлов
Delphi. DBTreeView. Обработка CheckBoxes
В главном модуле компонента при обработке события onClick
Posted in Delphi, Компонентостроение
Comments Off on Delphi. DBTreeView. Обработка CheckBoxes
Delphi. DBTreeView своими руками. Дополнительный модуль uSQLQueries
Дополнительный модуль, в котором сосредоточены основные SQL запросы. Имена некоторых полей берутся из ObjectInspector. Из специфичного для MySQL инструкция Insert… Select… для копирования узлов
Posted in Delphi, Компонентостроение
Comments Off on Delphi. DBTreeView своими руками. Дополнительный модуль uSQLQueries
Delphi. DBTreeView своими руками. Поиск
Модуль поиска по имени узла в компоненте выглядит следующим образом
Posted in Delphi, Компонентостроение
Comments Off on Delphi. DBTreeView своими руками. Поиск
Delphi.DBTreeView своими руками.Вставка скопированных, вырезанных узлов
Здесь самая большая сложность – восстановление структуры вставленных узлов в процедуре Structuring. В главном модуле компонента код выглядит следующим образом. Здесь у нас 2 потока должны работать по очереди, поэтому используем синхронизацию.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
//----------------------Вставка выбранных узлов----------------------------------------------------- procedure TDBTreeView.PasteNodes; {Здесь можно увидеть наглядный пример синхронизации потоков!!!} var PasteThread:TPasteThread; UpdateIndexesThread:TUpdateIndexesThread; Event:TEvent; IDSelected:integer; begin if not Assigned(FIDList) then FIDList:=TStringList.Create; //Защита, если список пустой, то выходим if FIDList.Count=0 then exit; //Если копируем родителя в ребенка, тоже выходим IDSelected:=integer(Self.Selected.Data^); if FIDList.IndexOf(IDSelected.ToString())<>-1 then begin raise Exception.Create('Начальный элемент содержит конечный.Вставка невозможна'); exit; end; Event:=TEvent.Create( nil, //Security Attributes true, //Manual Reset false,// Initial State '' ); //Event.ReSetEvent; // <<Вошли в событие //Запускаем поток копирования, передаем ссылки... Self.Items.BeginUpdate; PasteThread:=TPasteThread.Create(true);//true означает ручное управление потоком PasteThread.DBTreeView:=Self; //Передаем ссылку на дерево PasteThread.Event:=Event; //Передали ссылку на событие снаружи PasteThread.MyCreate; // Создаем внутренние переменные потока PasteThread.IDList.Assign(FIDList); PasteThread.IDofCopiedNode:=FIDofCopiedNode; PasteThread.Cut:=FCut; PasteThread.Start; PasteThread.FreeOnTerminate:=true; //Event.SetEvent; // << Вышли из события //if PasteThread.Finished then begin //Перенумерация индексов UpdateIndexesThread:=TUpdateIndexesThread.Create(true); UpdateIndexesThread.Event:=Event; UpdateIndexesThread.DBTreeView:=Self; UpdateIndexesThread.MyCreate; UpdateIndexesThread.Start; UpdateIndexesThread.FreeOnTerminate:=true; end; Self.Items.EndUpdate; FCut:=false; //Освобождение Event происходит внутри UpdateIndexesThread потока по ссылке //if Event<>nil then FreeAndNil( Event );// <<Так делать не надо, так как поток может // закончиться позже end; |
Posted in Delphi, Компонентостроение
Comments Off on Delphi.DBTreeView своими руками.Вставка скопированных, вырезанных узлов
Delphi.DBTreeView своими руками. Копирование, вырезка узлов
В главном модуле копирование, вырезка узлов выглядит следующим образом. FIDList это список (TStringList), в который мы собираем узлы для копирования и вырезки. Также используется модуль uSelectedOrChecked, он приведен ниже.
Posted in Delphi, Компонентостроение
Comments Off on Delphi.DBTreeView своими руками. Копирование, вырезка узлов
Delphi. DBTreeView. Поднятие, опускание узлов.
В главном модуле компонента поднятие опускание узлов выглядит следующим образом
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
//--------------------------------Поднятие, опускание узлов----------------------------------------- procedure TDBTreeView.NodeDown; var NodeUpDown:TNodeUpDown; begin try Screen.Cursor:=crSQLWait; //Do_Something NodeUpDown:=TNodeUpDown.Create(Self); NodeUpDown.DBTReeView:=Self; // << Передаем в поле экземпляра класса ссылку на себя NodeUpDown.NodeDown; finally Screen.Cursor:=crDefault; FreeAndNil(NodeUpDown); end; end; procedure TDBTreeView.NodeUp; var NodeUpDown:TNodeUpDown; begin try Screen.Cursor:=crSQLWait; //Do_Something NodeUpDown:=TNodeUpDown.Create(Self); NodeUpDown.DBTReeView:=Self; // << Передаем в поле экземпляра класса ссылку на себя NodeUpDown.NodeUp; finally Screen.Cursor:=crDefault; FreeAndNil(NodeUpDown); end; end; |
Сам модуль uNodeUpDown выглядит следующим образом
Posted in Delphi, Компонентостроение
Comments Off on Delphi. DBTreeView. Поднятие, опускание узлов.
Delphi.DBTreeView. Удаление узлов
В главном модуле компонента код выглядит следующим образом. Здесь важно корректно рекурсивно удалить память под указателями и только после этого удалить сами узлы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
//-----------------------------------Удаление узлов------------------------------------------------- procedure TDBTreeView.DeleteNodes; var DeleteThread:TDeleteThread; SelectedOrChecked:TSelectedOrChecked; begin try Screen.Cursor:=crSQLWait; //Do_Something // Собираем в список выделенные или отмеченные галочками и их потомков SelectedOrChecked:=TSelectedOrChecked.Create(nil); SelectedOrChecked.DBTreeView:=Self; //Передаем ссылку на объект SelectedOrChecked.List; // Собрали в список finally Screen.Cursor:=crDefault; end; Self.Items.BeginUpdate; //Запускаем поток DeleteThread:=TDeleteThread.Create(true); DeleteThread.DBtreeView:=Self; // Ссылка на объект дерева DeleteThread.MyCreate; // Создание внутренних переменных //Передаем список в экземпляр класса DeleteThread.IDList.Assign(SelectedOrChecked.IDListToCopyOrCutOrDelete); //Запускаем поток DeleteThread.Start; DeleteThread.FreeOnTerminate:=true; FreeAndNil(SelectedOrChecked); Self.Items.EndUpdate; end; |
Как видно, само удаление происходит в потоке. Модуль потока удаления выглядит следующим образом
Posted in Delphi, Компонентостроение
Comments Off on Delphi.DBTreeView. Удаление узлов
Delphi. DBTreeView своими руками. Соединение с базой данных
Все остальные модули DBTreeView используют модуль соединения. В данном модуле 3 класса 1) класс параметров соединения, – TDBConnectionParams Он нужен для показа параметров соединения в инспекторе объектов 2)Класс таблицы TDBTable и её полей 3) Класс непосредственно соединения TDBConnectionBPL Выглядит он … Continue reading
Posted in Delphi, Компонентостроение
Comments Off on Delphi. DBTreeView своими руками. Соединение с базой данных