Праздники ещё не закончились, работать лень, но надо как-то уже прекращать заниматься кишкоблудством и начинать работать в полную силу. Ну, а чтобы как-то себя расшевелить и начать уже работу в блоге, решил первый пост сделать простым - снова сказать несколько слов про Excel. Дело в том, что с момента выхода поста под названием "Работа с Excel в Delphi. Основы основ." прошло практически полтора года и этот пост (почему-то вопреки всем ожиданиям) очень прочно закрепился в выдаче поисковиков. Это, конечно хорошо, но этот пост (читай название) дает лишь небольшое представление о том как работать с Excel в Delphi. Никто ведь не изучает сразу квантовую механику с первого класса? Сначала учимся основам вообще - математика, физика и т.д. Так я решил поступить в начале рассказа про Excel - сначала дать общее представление, а потом по-тихоньку раскрывать тему более подробно и детально. Но поисковики немного спутали карты, подняв пост выше других про Excel. Соответственно, те из посетителей, кто уже имеют представление о работе с Excel, видя представленные в статье примеры, возмущаются по поводу того, что чтение данных в этом случае будет происходить медленно. И я не спорю, да проход по каждой ячейке листа - это жуткие тормоза. А ускорить процесс чтения можно и необходимо. Поэтому можно считать, что эта статья - расширение к основам.
Наши проекты
Delphi+Google
Chrono
ODFProc
Поддержка блога
А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.
Публикации
Год назад
Случайный пост
Последние
Сообщения форума
Комментарии
Опрос
Сегодняшняя тема, думаю, будет интересна в первую очередь тем, кто связан с программированием сетевых приложений. Про работу с JSON в Delphi я уже несколько раз рассказывал в блоге и приводил примеры того как можно разбирать различные JSON-объекты. Но во всех примерах я рассматривал работу лишь с одной из библиотек для работы с json в Delphi - SuperObject.
Но не стоит забывать и про то, что в Delphi существуют свои родные механизмы работы с JSON, которые содержатся в трех модулях: DBXJSON.pas, DBXJSONCommon.pas и DBXJSONReflect.pas. В этих трех модулях можно найти достаточно много полезных и интересных классов и методов. Если Вы никогда не слышали об этих модулях, то эта статья как раз для Вас.
С появлением в Delphi XE2 FireMonkey иногда ощущаю себя прям каким-то первоклассником =) Не сказать, чтобы прям уж так совсем все непонятно и сложно...скорее немного не привычно использовать новые FMX-контролы. Вот и сегодня от темы статьи так и напоминает что-то из разряда "Delphi для начинающих". Но, как говориться, из песни слов не выкинешь - раз решил поработать с FireMonkey, то начинать надо с простых вещей. Ну, а так как в статье про SQLite для Delphi XE2 было предложение расписать работу с Grid'ами в FMX, то попробуем написать небольшое приложение, которое будет заполнять табличку на основании запроса к базе SQLite. Читать далее »
Уже больше года прошло с момента публикации статьи "SQLite в Delphi 2010." Надо сказать, что рассмотренный в статье SQLiteWrapper я успешно использовал и в Delphi 2010 и в Delphi XE. Знаю, что есть ещё несколько подобных реализаций для работы с SQLite в Delphi, но почему-то этот wrapper мне понравился более всего - небольшой по размеру, удобный в использовании, простой в изучении. Что ещё для счастья нужно? Никакого паролирования мне для баз SQLite мне не требовалось поэтому использовал себе и использовал разработку Тима Андерсона (Tim Anderson). Но, как говориться, прогресс не стоит на месте и вот вышла Delphi XE2, сама SQLite вроде бы тоже несколько раз "апнулась". Соответственно, поддержка x64, FireMonkey и прочие довольно обширные нововведения в Delphi, а также обновление библиотеки SQLIte.dll внесли свои коррективы в разработку...и мой любимый враппер дал сбой. Нет, он конечно и раньше требовал, например, передачу в параметры методов исключительно AnsiString, но это, можно сказать, мелочи. А тут вдруг после сборки проекта под XE2 перестали работать некоторые методы, например FieldAs..., Bind и пр. Посыпались исключения. Первым делом глянул в репозиторий, но там оказалась ревизия от февраля месяца, т.е. для XE2 не предназначенная, да и среди нововведений значился только бэкап баз данных.
Решил немного пошерстить Сеть в поисках подходящего враппера для SQLite в Delphi XE2. И был приятно удивлен, что разработка Тима Андерсона жива, здорова и даже теперь уже "пышет" кроссплатформенностью. Правда изменились/исчезли некоторые методы, но и добавилось достаточно. Собственно эту находку я сегодня и решил представить в своем блоге.
В первой статье, посвященной работе с LiveBindings были рассмотрены простенькие примеры того как и где может использоваться связывание любых данных с визуальными компонентами на форме. Собственно всё, что от нас требовалось - правильно составить выражение для обеспечения связи и "виртуозно" им воспользоваться =). Думаю, что для первого знакомства с механизмом LiveBindings подобных примеров было достаточно.
Сегодня я решил сделать ещё один небольшой пробный шаг в использовании LiveBindings и сделать связь свойств своего объекта с компонентами на форме. Посмотрим как это можно реализовать, а заодно и напишем пару выражений для связи самостоятельно безо всяких редакторов.
Продолжаем знакомиться с новыми возможностями в Delphi XE2. С FireMonkey немного познакомились - в дальнейшем, думаю, мы ещё вернемся к этому вопросу. А пока на повестке дня небольшой обзор ещё одного нововведения - LiveBinding.
LiveBinding - это новый механизм связывания различных типов данных. С помощью LiveBinding мы можем связывать различные свойства компонентов, поля баз данных со свойствами компонентов, свойстсво компонента типа Integer, со свойством другого компонента типа String без явного преобразования типов данных и т.д. и т.п.
Кроме того, LiveBinding позволяет создавать новые приложения с минимальными затратами времени на написание исходного кода.
Но это все пока только слова. Давайте рассмотрим работу механизма LiveBinding на примерах, ну а вывод о том использовать или не использовать LiveBinding в своих приложениях - останется за Вами ;). Читать далее »
В предыдущем посте мы остановились на том. что разработали небольшое приложение, которое проводило мониторинг изменений в определенной директории и, в случае обнаружения какого-либо изменения, "сигналило" нам. Для организации мониторинга мы использовали поток (TThread) в котором использовалось три взаимосвязанные функции Windows: FindFirstChangeNotification, FindNextChangeNotification и FindCloseChangeNotification.
Как говорилось ранее, с помощь этих функций нельзя узнать какую-либо специфическую информацию об изменениях. Так, например, при срабатывании события мы не могли узнать изменилось ли имя файла или был добавлен новый файл. Или, если произошла смена имени файла, то мы не можем узнать какое имя было до смены и какое стало после. Все эти нюансы могут натолкнуть неподготовленного разработчика на мысль, что использование приведенных выше функций ограничено - задача мониторинга изменений в директории обычно преследует не абстрактную цель - узнать что что-то поменялось (хотя, иногда и такой информации бывает достаточно), а получить конкретный ответ на вопрос - что изменилось и как (сменилось имя, размер, права доступа и т.д.? Прежде, чем мы перейдем к работе с такой специфической информацией об изменениях, мы немного доработаем наш предыдущий пример и посмотрим как с помощью уже известных нам трех функций можно настроить мониторинг так, чтобы получать максимально конкретизированную (на сколько это возможно) информацию по изменениям.
При разработке приложений Delphi для синхронизации чего-либо, например, файлов на разных компьютерах, так или иначе приходится разрабатывать алгоритм с помощью которого можно однозначно определять какие из файлов необходимо удалить из определенной директории, какие переместить, переименовать и т.д. Подобные алгоритмы и примеры их использования на практике не являются редкостью - в Сети Вы можете найти массу самых различных вариаций Delphi-кода с помощью которого можно отследить изменения в директориях и файлах Windows.
Не так давно и мне довелось столкнуться с подобной задачей - отследить изменения в определенной директории и сформировать список заданий для синхронизации файлов с сервером. Так как до этого момента мне не доводилось разрабатывать подобные алгоритмы, то пришлось пошерстить просторы Интернета и собрать как можно больше информации на заданную тему. Ну, а результаты моих поисков я решил оформить в виде отдельной статьи в блоге. Итак, сегодняшняя тема - мониторинг изменений в директориях и файлам средствами Delphi. Читать далее »
В посте "Статистика WebDelphi за всё время его существования" я упоминал о том, что мой блог довольно часто посещают люди в поисках информации по работе с Excel в Delphi. Для меня это было, признаться, несколько странно, т.к. в плане поисковых запросов на свой блог я рассчитывал больше на другие запросы, но, как говориться – что есть то есть. Естественно, придя в блог некоторые читатели просто получают необходимую информацию и благополучно уходят, а некоторые задают вопросы в надежде получить от меня ответ.
Коме-то я отвечаю тут же в посте, а некоторые вопросы, ответ на который превышает размер самого вопроса – выношу в отдельный пост, чтобы и вопрошающему была пища для размышлений и другим ищущим было, что почитать. Вот этот пост такого плана – ответ на вопрос читателя.
Прежде всего я сразу скажу, какая информация использовалась при написании этой статьи. Итак
Уже почти год назад я затрагивал тему о работе с регулярными выражениями VBScript в Delphi 2010. Сегодня наконец-то докачал iso-образ диска с RAD Studio XE, установил Delphi XE для более пристального ознакомления с новинками и обнаружил несколько новых модулей, цель которых - обеспечение работы с регулярными выражениями в Delphi. Я решил вспомнить прошлое и написать небольшую программку, демонстрирующую работы с регулярными выражениями с использованием "родных" модулей в Delphi XE.









Свежие комментарии