Как написать браузер на lazarus
Службы в Windows или как они называются в *nix системах Демоны предназначены для выполнения ряда определенных задач без вмешательства пользователя, таких как FTP сервер, WWW или MySQL. Благодаря Lazarus мы можем создавать такие демоны, используя пакет lazdaemon.
Для того чтобы начать разработку службы\демона, установите пакет lazdaemon, который по умолчанию входит в состав Lazarus. Установить вы его можете как через пункт меню «Пакет/Установка и удаление пакетов», так и через запуск lpk файла из папки: lazarus/components/daemon/lazdaemon.lpk
Итак, как обычно начнем с постановки задачи: Чтобы особо не мудрить создадим простую службу, в которой будет запускаться поток, и заносить в файл некий текст вплоть до ее остановки. Запускаться данная служба должна автоматически при старте системы, иметь имя devlaz.
Приступим. После установки пакеты lazdaemon при создании нового приложения, в конце должны добавится 3-и строки. Нас будет интересовать Приложение-демон (служба)
TDaemon — непосредственно экземпляр сервиса. Именно этот объект реализует сам сервис (его мы видим в Windows в «Управление компьютерами/Сервисы»). Что требуется выполнить перед\после установкой\удаления службы,
TDaemonMapper — Этот компонент выполняет регистрацию службы в системе. Здесь мы можем написать код, который будет выполнятся после установки демона, его удаления и при его запуске.
В свойствах DaemonMapper1 есть параметр DaemonDefs, выбираем его и жмем добавить:
Добавив новый поток демона и выбрав его, мы должны увидеть его свойства:
DaemonClassName по умолчанию это TDaemon1
Description Это описание нашей службы
DisplayName Отображаемое имя службы
Name Имя службы
Данных свойств достаточно для запуска нашей службы.
Теперь давайте напишем код. Выбрав DaemonUnit1 добавим в исходный код наш поток и опишем в переменной файл в который будет происходить запись:
Далее на событие OnStart
добавим следующий код:
Ну и опишем код нашего потока:
Теперь компилируем наш проект и запускаем исполняемый файл с параметром -i для того чтобы он установился в системе. Увы автоматический запуск после этого я настроить не смог, если кому-то это удалось подскажите добавлю в статью, поэтому запускаем службы вручную из mmc оснастки Службы:
Ждем примерно 10 секунд и останавливаем ее отсюда же. В результате чего в файле D:\log.txt должны появится записи свидетельствующие о работе потока.
Для удаления службы из систему требуется указать ключ -u
Путь до службы желателен без русских символов.
Доп. информацию вы можете прочесть на сайте Wiki
Создание службы в Lazarus обновлено: 22 февраля, 2017 автором: Oleg E.10 комментариев “ Создание службы в Lazarus ”
Здравствуйте!
Не могли бы вы описать процесс вывода данных из формы сделанной в Lazarus в шаблон документа ms office ? Т.е. есть шаблон например договора, забиваем данные в форму (номер договора, дата и пр. ) и эти данные вставляются в нужные места в документе.
С уважением Олег
Привет Олег. Вам стоит обратить внимание на компонент FPSpreadsheet, подгружать ваш шаблон и воспользоваться функцией замены текста.
Здравствуйте. А можете рассказать как сделать так , чтобы приложением созданным в lazarus могли пользоваться определенное время, а потом нужно было вводить лицензионный ключ или другую возможность, чтобы можно было ограничить время использования программы. Чтобы можно было скачать триал версию приложения, а потом если понравилось купить лицензию , ключ или др. За ранее спасибо
Тут нужно определится как вы будете реализовывать данную технологию. Фиксировать запуск программы, записывая время в файл на ПК или где-то в облаке(что мне больше нравится, но тогда надо ограничить запуск при отсутствии интернета.)
Хранить ключ программы в открытом виде в исходнике тоже не стоит, ибо легко можно будет его легко вытащить.
Нужно чтобы 1-ый ключ формировался по определенному алгоритму, жестко привязываясь к железу, далее отправлялся запрос на сервер. Где обрабатывался и присылался уже 2-й ключ программы для данного ПК. Если интернета нет, то активацию можно делать по Е-Маил или телефону.
Увы описать данный код 10-ю строчками не получится. Требуется писать код как в программе, так и на стороне сервера, например php.
Здравствуйте. Хорошая статья. Все понятно изложенно.
Вот если обьяснили как связать службу и моё прлилложенние.
В принципе вам просто надо запустить основные потоки вашего приложения. Больше сказать трудно увидев ваш код.
Доброго времени суток, дорогой читатель. Сегодня я познакомлю тебя как сделать работу в Lazarus более удобной, сделав из разбросанных рабочих окон единый интерфейс. Давайте разберемся что для этого нужно.
Оказывается разработчики уже позаботились об этом. Нам требуется лишь включить данный пакет расширений, который по умолчанию включен в Lazarus: Anchor Docking
Так выглядит наш Lazarus по умолчанию.
Для того чтобы активировать данный пакет нужно:
Зайти в Пакет-Установить/удалить пакеты
Выбираем anchordockingsgn, жмем кнопку Установить выбранное, после чего Сохранить и перезапустить IDE
Появляется окно с набором пакетов которое будет(было) добавлено в Lazarus, нажимаем Продолжить
После чего наш Lazarus запустится в новом образе.
Я был доволен как слон, пока не попытался запустить один из своих проектов, получив в ответ ошибку: TWinControl.WMSize loop detected
Теперь наш Lazarus принял более удобный вид, по крайней мере для меня. Удачи в кодинге!
Решил немного отойти от темы баз данных. И перейти в другое русло разработки, а именно в веб. Понадобилось для одного проекта сделать просмотрщик html страниц, попробовал компоненты для отображения html, оно конечно показывает, но не настолько хорошо как хотелось бы. Если на странице используются разные стили то отображение хромает, опять же с html5 у них проблема. Поэтому обратил свой взор в сторону компонентов webbrowser для Lazarus'а. Так будет проще и лучше. Опять же поддержка веб стандартов получше будет.
У Delphi есть компонент TWebBrowser на базе ослика. И его возможностей вполне хватает. Но вот для Lazarus'a такого компонента по умолчанию нет. Поэтому полез в веб искать что то путевое. Поиск удался. Среди найденного выделялись два компонента.
В о общем скачиваем исходники компонента. Распаковываем архив в какую либо папку. Я для это создал папку на диске С c:\lcl , и распаковал туда архив с исходником. Затем открываем Lazarus и выбираем пункт меню Пакет - Открыть файл пакета (.lpk)
В появившемся диалоге выбора файла переходим в каталог куда у вас распакован код компонента и выбираем cef.lpk.
Появится окно установки пакета. В нем нажимаем сначала кнопку Компилировать, а затем выбираем Использовать - Установить.
Появится окно с предложение пересобрать среду разработки.
Нажимаем Да и наблюдаем процесс компилирования разработки.
После этого на палитре компонентов появляется вкладка Chromium.
Теперь идем сюда и переходив в раздел Branch 2454 и скачиваем Test App для windows 32, если у вас другая версия операционной системы и среды Lazarus, то скачиваете под свою версию.
Это набор библиотек необходимый для функционирования нашего браузера. Его содержимое необходимо скопировать в папку, куда у вас будет компилировать ваше приложение.
Теперь создаем новое приложение. У меня получилось такое.
Я добавил на форму компонент TСhromium, пару кнопок, и pagetab с двумя страницами. На одной разместил TСhromium, а на второй разместил TSynEdit (компонент с подсветкой синтаксиса), где будет отображаться исходный код страницы. А дальше написал не много кода для работы. Да и еще что бы все работа в раздел uses добавьте следующие юниты.
А теперь по работе с компонентом.
Код загрузки страницы.
Если требуется использовать при работе Cookie файлы то код немного видоизменяется.
После этого если вы допустим войдете на сайт через форму входа и нажмете запомнить на сайте, затем закроете программу и откроете снова то вы автоматически войдет на сайт.
Код получения html исходника страницы. По интернету гуляет кусок кода для работы с Chromium на Delphi,
для Lazarus он тоже подойдет. Но при компилирование будет выдаваться ошибка
Error: Wrong number of parameters specified for call to "StringVisitor"
Что бы её убрать в самом начале кода поменяйте директиву
И все нормально скомпилируется.
Пример получения подстветки кода сайта.
Если требуется отобразить адрес страницы то можно использовать такой код.
Так же меня интересовала работа с проксей у данного компонента, но к сожалению как сделать это из кода я не нашел. Но есть возможность запускать программу с передачей ей команды. Делается это так.
Как видно из заголовка в данной статье пойдет разговор о работе с базами данных при помощи Ide Lazarus. Базы данных занимают важную роль в современном мире, их используют для создания большинства сайтов, информационных систем, различных программ. В мире насчитывается огромное количество СУБД (Система управления базами данных), как коммерческих MsSql, Orcle, Interbase так и бесплатных вроде MySQl, PostgreSQL, Firebird, Sqlite. Lazarus же позволяет работать с большинством из них, для этого в среду можно установить компоненты для работы с соответствующими СУБД. Мы же рассмотрим общие способы работы с базами данных. В основе большинства баз данных лежит язык SQL ( язык структурированных запросов ) , который позволяет получать о обрабатывать наборы данных. По поводу синтаксиса данного языка можно почитать на википедии либо на соответствующих форумах. Мы же будет рассматривать непосредственную работу с данными.
Для начинающих работать в Lazarus в качестве первого опыта вполне подойдет стандартный набор компонентов с вкладки SQLdb, данная вкладка содержит набор для работы с различными СУБД.
Состав вкладки SQLdb.
TSQLQuery | Компонент для получения и изменения данных | |
TSQLTransaction | Компонент для работы с транзакциями | |
TSQLScript | Компонент для работы с большим количеством Sql кода | |
TSQLConnector | Компонент для установления подключения к различным базам данных | |
TMSSQLConnection | Компонент для подключения к СУБД MSSql (Microsoft SQL Server) | |
TSybaseConnection | Компонент для подключения к СУБД Sybase (Sybase SQL Server) | |
TPQConnection | Компонент для подключения к СУБД PostgreSQL | |
TPQTEventMonitor | Компонент для взаимодействия с событиями в PostgreSQL | |
TOracleConnection | Компонент для работы с СУБД Oracle | |
TODBCConnection | Компонент для доступа к данными посредством драйверов ODBC | |
TMySQL40Connection | Компонент для подключения к СУБД MySql версии 4.0 | |
TMySQL41Connection | Компонент для подключения к СУБД MySql версии 4.1 | |
TMySQL50Connection | Компонент для подключения к СУБД MySql версии 5.0 | |
TMySQL51Connection | Компонент для подключения к СУБД MySql версии 5.1 | |
TMySQL55Connection | Компонент для подключения к СУБД MySql версии 5.5 | |
TMySQL56Connection | Компонент для подключения к СУБД MySql версии 5.6 | |
TSQLite3Connection | Компонент для подключения к СУБД SQLite | |
TIBConnection | Компонент для подключения к СУБД Firebird, Interbase | |
TFBAdmin | Компонент для управления сервером Firebird | |
TFBEventMonitor | Компонент для работы с событиями Firebird, Interbase | |
TSQLDBLibraryLoader | Компонент для загрузки библиотеки доступа к данным |
Так же для работы потребуется компонент TDataSource с вкладки Data Access, он является прослойкой между компонентами для доступа к данным и компонентами для отображения данных.
Доступ к данным.
Для подключения к какой либо СУБД на форму или датамодуль следует разместить требуемый компонент. Все зависит от требуемой СУБД. Я выбрал SQLite и соответственно добавил на форму TSQLite3Connection. Он позволит настроить подключение к требуемой базе данных. Так же следует добавить на форму компонент TSQLTransaction. Он обеспечивает целостность работы с данными. О нем будет позже более подробнее.
Поскольку SQLite это локальная СУБД, то не требуется указывать такие параметры соединения как сервер, порт, пользователь, пароль, достаточно указать только путь к файлу базы и кодировку для работы, а также указать компонент для транзакции.
Сделать это можно примерно так.
Для того что бы программа заработала необходимо в папку с проектом поместить библиотеку sqlite3.dll, скачать последнюю версию которой можно тут. Для остальных СУБД тоже потребуются соответствующие библиотеки.
Что бы получить данные из базы на форму помещается компонент SQLQuery1, у него в качестве database указывается компонент SQLite3Connection1, а в качестве параметра transaction компонент SQLTransaction1.
Затем вписать в свойство SQL соответствующий запрос для выборки данных и выполнить процедуру Open. Если требуется добавить изменить или удалить данные то следует сделать ExecSQL.
После этого мы получим набор данных, если точнее таблицу. Для работы с ней компонент TSQLQuery содержит базовый набор функций и свойств.
Для навигации по набору данных используются следующие методы.
First | Перейти на самую первую запись |
Last | Перейти на самую последнюю запись |
Prior | Перейти на запись назад |
Next | Перейти на запись вперед |
Данные методы позволяют передвигаться по строкам таблицы.
Допусти нам надо пройтись по всем строкам таблицы и скопировать определенное значение, самый простой способ будет таким.
Так же для навигации по данным можно использовать визуальный компонент TDBNavigator.
Для отображения данных из базы используются компоненты из вкладки Data Controls, они созданы на базе обычных визуальных компонентов, но предназначены для отображения данных различных типов.
Что бы отобразить полученные данные на форму размещается компонент DataSource1 и визуальный компонент DBGrid1. У компонента DataSource1 свойству DataSet присваивается компонент SQLQuery1, а у компонента DBGrid1 выставляется свойство DataSource равным DataSource1. Теперь если сделать SQLQuery1.Open то в таблице отобразятся данные из базы.
Добавление данных
Добавлять данные в таблицу можно двумя способами. Один через открытый набор данных. Второй через выполнение специального sql запроса INSERT. Рассмотрим оба способа.
Добавление данных через открытый набор данных.
Для манипулирования с данными используются следующие команды.
Append | Открывает процедуру добавления записи в конец набора данных |
Insert | Открывает процедуру добавления записи в текущее место набора данных |
Edit | Открывает процедуру редактирование текущей записи |
Post | Записывает данные |
Delete | Удаляет выбранную запись |
Cancel | Отменяет процедуру работы с данными |
Refresh | Обновляет набор данных |
Эти команды использует большинство компонентов для работы с данными.
Пример добавления новой записи через набор данных.
Может показаться что слишком много команд надо выполнить что бы данные занести в базу. Но это необходимо выполнять только для данных компонентов, есть более человеческие компоненты, где хватает только одного Post.
Пример добавления данных через sql запрос.
Как видите тут ничего сложного. Для добавления больших объемов данных лучше использовать второй способ. Поскольку первый способ после добавления записи вызывает обновление списка данных, что будет приводить к постепенному замедлению добавления данных.
Изменение данных.
Изменить данные в базе можно несколькими способами. Рассмотрим два способа изменения данных при помощи компонентов Sqldb.
Первый способ будет через открытый набор данных.
Достаточно встать на требуемую запись и открыть её через процедуру Edit
Так же данные можно редактировать через sql запрос UPDATE
Удаление данных
Удалить данные из базы не сложно, главное удалить именно те данные, а не те которые были нужны. Зачастую от этого спасают транзакции и бекапы. Но не всегда. Рассмотрим так же два способа удаления данных.
Удаление из набора данных. Просто становимся на требуемую запись и выполняем следующий код.
Также удалить данные можно через sql запрос DELETE, делается это следующим образом.
При удаление данных через запрос нужно точно знать какие данные удалять. Если сделать так.
То удаляться все данные из таблицы table1. Поэтому требуется точно указывать какие данные удалять.
Поиск данных.
Поиск данные является одной из необходимых вещей при работе с базами данных. Существует несколько способов осуществления данной операции. Не будем рассматривать все. Остановимся на самых простых.
Первым способом будет поиск в выбранном наборе данных. Он осуществляется по конкретному столбцу или столбцам данных. Выглядит это так.
При использование данной записи маркер выбранной записи переместиться на найденную запись, если искомых данных не будет обнаружено то маркер переместиться на последнюю запись.
Так же можно сделать выборку данных с условием отбора SELECT . WHERE делается это так.
Данный запрос применяется для поиска по точным данным. Если же требуется найти все похожие данные то тут применяется функция sql LIKE, позволяет задать примерный поиск значения в строках данных для конкретного столбца. Синтаксис данной функции такой
Пример использования функции из кода.
Данный запрос выведет все имена содержащие букву и.
Есть небольшая проблема у SQLite. В данной СУБД оператор LIKE поддерживаться полностью только для латиницы, для кириллицы он тоже работает но только с соблюдением регистра букв. Что бы избежать данной проблемы требуется либо использовать библиотеку sqlite3.dll с поддержкой ICU, либо использовать свою функцию LIKE.
Транзакции
Транзацкии в базах данных обеспечивают целостность и защищенность данных. Они позволяют изменить данные в базе либо вернуть предыдущее состояние данных в пределах транзакции. Имеется различный уровень изоляции данных при работе транзакций, это зависит от используемой СУБД.
Пример работы с транзакциями из кода.
Так же транзакции удобно использовать когда необходимо загрузить в базу большое количество данных. Поскольку транзакции ускоряют процесс работы с записями в сотни раз. Но не стоит ими злоупотреблять, поскольку неправильное их использование может привести к зависанию программ, работающих с базой.
Вот так примерно можно работать с базами данных из Lazarus при использование компонентов SQLdb. Данная статья не претендует на звание самого умного документа, а просто показывает общие методы работы с базами данных.
Читайте также: