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

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

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

Delphi. TLangMan. Перевод приложений. International Application

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

Вот что нашел на просторах сети)

Сайт автора

http://www.regulace.org/index.php?cPath=26

Стоит эта штука в районе 50 евро

Delphi. Уменьшение изображения. Обобщение и нюансы

Я уже писал об уменьшении изображения.  Здесь про true уменьшение изображений. То есть прямо, чтобы окрыл файл в проводнике, а оно там стало меньше))

Простой способ уменьшения изображения для UniGUI

Как уменьшить много картинок и сохранить их на диске?

По сути, у меня всего 2 способа, которые я для себя открыл и пытался использовать. Но сегодня я узнал об их нюансах.

Способ №1 — через GDI+ (для idHTTP сервера или основного потока)

Нюанс в том, что этот способ хорошо работает в основном потоке или, скажем, на сервере, но плохо работает в Thread, созданном в ручную. В серверном потоке, тем не менее, все хорошо. Не знаю, почему, но пока что понял это для себя.

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

Всё вместе у меня получилось как-то так… Тут всё вместе, некий тестовый код, скажем так, много переменных создается и уничтожается без работы. Скажем twic отказался работать на сервере, выдавая AV. Глубоко копать не стал, заменил его TPicture Читать далее «Delphi. Уменьшение изображения. Обобщение и нюансы»

Delphi. Читаем ориентацию из Exif для Jpg файлов и ориентируем правильно

Каждый программист встречается с «Battle». Иногда сидишь сутками, решая проблему и как прекрасен тот момент, когда понимаешь, как это можно решить.

Столкнулся с тем, что если загрузить методом idHTTP.Get jpg файл , у которого в exif данных указана ориентация, скажем «Rotate 90°», то эта ориентация слетает, и это никак не вписывалось в мои планы. Хотелось нормальной ориентации)

Помучившись какое-то время с этим вопросом, я понял следующее.
1. Нужно научиться читать exif информацию
2. Нужно научиться поворачивать картинки, причем делать это быстро.

Определение ориентации

По 1 вопросу поиск дал отличнейший сайт. Это отличная библиотека для чтения exif информации. Скачав, установив все, я запустил демку. Вот как это выглядело.

Как видно ориентация у данной картинки нормальная и следовательно поворачивать её не нужно.

Следующие файлы я скопировал из скачанных файлов и положил их в папку, рядом с программой. Добавил это папку в lib самой delphi. Файл uBmpRot я создал сам — это код для поворота картинки.

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

Далее

Ну ок, определять ориентацию мы научились. Теперь нам нужно научиться поворачивать изображение.

Поворот Битмапа

На этом сайте я взял код для поворота битмапа и загнал его в юнит uBmpRot. Вот этот код

Конечное решение

Собрав всё вместе, мы получим что-то вроде…

Вот в принципе и всё! Но для меня это были сутки мучений) Всем удачи…

 

Delphi. TRichView. Обходим глюк с выравниванием таблиц при загрузке HTML при помощи TrvHTMLImporter

Всем привет, давненько ничего не писал в блог. Итак, столкнулся с таким глюком. В чем суть?

При загрузке html контента методом RvHtmlImporter1.LoadHtml(s) выравнивание таблиц слетает. Если, скажем, она была выравнена по центру, то она выравнивалась по левому краю.

Просидел с этим 2 дня, так как такой вариант меня не устраивал.

Решение

Использовать компоненты

TRVHTMLViewImporter

THTMLViewer

 

У RVHTMLViewImporter1 прописать свойство HTMLViewer и загрузить контент, например таким образом…

 

MySQL. Вставка с инкрементом

Если одно из полей должно возрастать при определенных условиях, можно при вставке выполнить такие инструкции

 

Delphi. Как сделать Ribbon меню на DevExpress?

Делая меню для одной из своих программ, я экспериментировал со встроенными Риббонами из стандартной библиотеки Delphi. Но, скажу честно, отказался от этой идеи. Местами были глюки. Всё настроил, но оно слетает. Пожелание разработчикам стандартных Риббонов Delphi — довести до ума.

Остановился на риббонах от DevExpress. Скажу честно, мне эта библиотека очень понравилась, но в неё нужно «вьезжать» какое-то время. Чтоб это время сэкономить тем, кто хочет сделать себе красивое меню для VCL программы, предлагаю данный пост.

Вот, что может получиться после прочтения данной статьи. Это пример одной из моих программ, которую я делаю сейчас.

Итак, что нужно сделать? Разберем по шагам.  Читать далее «Delphi. Как сделать Ribbon меню на DevExpress?»

MySQL. Добавляем хранимые процедуры и функции ( «рутину» ) в модель и физическую базу данных

Добрый день, сегодня простая и интересная тема.  Добавление хранимых процедур и функций, или как их называют в документации MySQL «рутин» в модель и физическую базу данных.

Добавление хранимой функции в физическую базу данных

Здесь всё просто. Открываем WorkBench

Добавляем хранимую функцию. Скажем это будет проверка логина, пароля и роли при входе.

Функция проверяет логин, пароль и роль, если они одновременно подходят, значит возвращает единицу. Если нет, или таких записей больше чем 1, то возвращает 0. Предполагается, что логин должен быть уникальным. Соответственно записи тоже. Читать далее «MySQL. Добавляем хранимые процедуры и функции ( «рутину» ) в модель и физическую базу данных»

Delphi.MySQL.Мои компоненты.TPSDBTreeView

Вот что у нас получится.  Дерево работает над базой MySQL. В примере 2 дерева, работающие над одной таблицей базы. 3-й ряд кнопок сам определяет какое дерево активно. Исходники прилагаю.

Типовая таблица для дерева. Это минимальный набор полей. Всё остальное можно добавлять по необходимости. При этом копирование-вставка записей будут происходить корректно.

Читать далее «Delphi.MySQL.Мои компоненты.TPSDBTreeView»

Delphi. MySQL. InsertSelect всех полей для реализации Copy Paste

Делал для своего компонента TPSDBTreeView функцию «вырезать, копировать, вставить» на основе InsertSelect. Проблема в том, что если пытаться копировать все поля, скажем так

то получим

Что же делать в таком случае? Нашёл такой выход

Вот пример из проекта

 

При вставке в Delphi TFDQuery

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

И далее обращаться, скажем так