Delphi. TRichView. Замена текста на текст и контрола на текст

Понадобилось, было не очевидно, решил записать

Способ №1 — на примере замены текста на таг итема (взято отсюда)

Применение, пусть текст задан так [R]Что-то[/R], а в этом итеме «Какой-то таг», тогда пройтись по всем итемам и заменить текст на таг можно так

Способ №2 (источник)

Также понадобится справка для этого способа

Замена контрола на текст( Жми, только сегодня, акция ))))

 

 

Delphi. Делаем template на свойства

В С# есть отличная конструкция при объявлении свойства {get;set}, при этом поля создаются автоматически. Отлично, подумал я и решил как-то упростить себе задачу объявления полей и свойств в Delphi. Вдохновившись постом Влада Баженова на тему создания шаблонов. я зашел в

Нашёл там шаблон propf.xml, и на основе его сделал свой шаблон и сохранил его как отдельный файл с новым именем

Подумал я, что это прекрасно! Теперь, когда нужно объявить свойство, я просто жму на Ctrl+J

Нахожу там fieldAndProperty, жму на Enter и вставляется вот что

Теперь я меняю слово Fname, а оно меняется автоматом везде, аналогично для слова type и для всех слов, обведенных в рамки.

Алгоритм Дейкстеры — поиск минимального пути на графе при не отрицательных весах ребер

Информация с Интуита…

Итак, пусть граф задан матрицей смежности.

Линейный массив dist будет хранить длины текущих путей от вершины s до всех остальных вершин. В начале этот массив будет инициирован числами MaxLongInt, символизирующими «бесконечность». По окончании работы алгоритма в этом массиве останутся только минимальные значения длин путей, которые и являются расстояниями.

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

Переменная last будет хранить номер последней помеченной вершины. Читать далее «Алгоритм Дейкстеры — поиск минимального пути на графе при не отрицательных весах ребер»

Алгоритмы. Топологическая сортировка методом DFS

На входе  бесконтурный орграф (если есть контуры то привет тебе товарищ, не сработает в чистом виде этот алгоритм).

На выходе нужно получить упорядоченный список вершин графа.

Для простоты зададим граф матрицей смежности…

Берем за основу DFS и при каждом проходе добавляем пройденную вершину в наш список. Полученная последовательность и будет результатом сортировки.

Примерный код….

Процедура рандомного заполнения массива

Инициализация

Рекурсивная процедура обхода в глубину для 1 узла

Полный проход методом DFS для всех узлов

 

 

 

Delphi. Алгоритмы. DFS. Поиск в глубину рекурсивно

Своими словами. Берем первую вершину, смотрим, нет ли у нее инцидентных ребер (прямых потомков), если есть помечаем, повторяем процедуру для найденной вершины, и так до конца глубины. Возвращаемся, идем к соседней вершине, и так далее.

interface

init visited array

dfs

Теперь, если наш граф не дерево с единственным корнем, обходим по всем узлам

 

Delphi. Алгоритмы. BFS — обход графа в ширину

Теория хорошо описана на Вики.  Суть в этой гифке ниже.

 

Моя скромная реализация для представления графа в виде матрицы смежности. Ноль в матрице смежности означает отсутствие ребра между вершинами. Единица — наличие.  В основе обхода в ширину — такая структура как очередь. Первым вошел, первым вышел.

Своими словами (самое ценное, когда своими словами).

1 Берем стартовую вершину. Добавляем ее в очередь.

2 Ищем у этой вершины все инцидентные ребра.  Добавляем их в очередь.

3 При добавлении каждой вершины что-то делаем.

4 Первая вершина отработала, удаляем ее из очереди.

5 Берем следующую по очереди вершину (в моей реализации left+1) и повторяем с п. 2

 

Также рандомная инициализация BFS

Список источников, которые мне помогли)

Отличная тема на форуме

 

Delphi. Алгоритмы. Создание графа на списках смежности

Повторяем основы. Теорию переписывать не буду, лишь моя скромная реализация базовых функций — добавить ребро, удалить ребро, найти ребро. Из которых впоследствии можно сделать граф на списках смежности.

Основная идея графа на списках смежности как я понял для себя ещё раз) — сделать массив списков смежности. Описывая граф, мы смотрим, связана ли его вершина с другими вершинами, если да, то создаем список смежности, скажем 1 вершина связана с 5 и 7, значит, можем создать такой список из 3 элементов, в котором из 1 вершины будет ссылка на 5, из 5 на 7, либо в другом порядке, но важно, что мы перечислили все вершины, с которыми смежна наша 1 вершина. Таким макаром проходим по всем другим вершинам, должно получиться что-то вроде…

Теория хорошо описана здесь.

Так как была ночь и я устал, бахаю весь модуль…

Ну и исходнички  412_Graph

Чуть позже на форуме дали более простой и элегантный способ сделать тоже самое

Заводим список вершин и ребер

Добавляем пару вершин и ребро, которое их соединяет

Уничтожаем

 

 

MySQL — делаем swap 2 значений одной колонки

Понадобилось для задачи «Поднять, опустить» в списке клиента через базу.

Дергаем одну из процедур, описанных ниже и обновляем множество на клиенте. Вся работа происходит на сервере базы.

Вот таблица, для которой это сделано

главное здесь, это sortIndex

Все значения отсортированы по  sortIndex. Простое и элегантное решение через хранимые процедуры в MySQL

Вариант № 1 Универсальный, записи могут находиться где угодно в этой таблице

Вариант №2 Записи должны находиться рядом друг с другом

swapDown

swapUP

Дергаем примерно так…

Пример реализации для Delphi клиента

 

 

Delphi. Ручное управление транзакциями

Работаю с MySQL InnoDB, там транзакции, коммиты и откаты идут автоматом, но товарищ мой сказал «хочу сам управлять этим». И вот что получилось, море кода, но да, управление есть…

На примере вставки записи в новую таблицу

А как Вы обрабатываете транзакции?

Delphi. VCL и не только. Делаем фильтр. Почти быстро и просто

Выглядеть он будет у нас вот так…

Можно добавлять бесконечное число параметров для фильтрования. Это начальная версия, я расскажу идею, там ещё много всего надо доработать, но как идея вполне рабочая.  Читать далее «Delphi. VCL и не только. Делаем фильтр. Почти быстро и просто»