Как написать браузер на lazarus

Обновлено: 05.07.2024

Службы в Windows или как они называются в *nix системах Демоны предназначены для выполнения ряда определенных задач без вмешательства пользователя, таких как FTP сервер, WWW или MySQL. Благодаря Lazarus мы можем создавать такие демоны, используя пакет lazdaemon.

Для того чтобы начать разработку службы\демона, установите пакет lazdaemon, который по умолчанию входит в состав Lazarus. Установить вы его можете как через пункт меню «Пакет/Установка и удаление пакетов», так и через запуск lpk файла из папки: lazarus/components/daemon/lazdaemon.lpk

Итак, как обычно начнем с постановки задачи: Чтобы особо не мудрить создадим простую службу, в которой будет запускаться поток, и заносить в файл некий текст вплоть до ее остановки. Запускаться данная служба должна автоматически при старте системы, иметь имя devlaz.

Приступим. После установки пакеты lazdaemon при создании нового приложения, в конце должны добавится 3-и строки. Нас будет интересовать Приложение-демон (служба)

1

TDaemon — непосредственно экземпляр сервиса. Именно этот объект реализует сам сервис (его мы видим в Windows в «Управление компьютерами/Сервисы»). Что требуется выполнить перед\после установкой\удаления службы,

TDaemonMapper — Этот компонент выполняет регистрацию службы в системе. Здесь мы можем написать код, который будет выполнятся после установки демона, его удаления и при его запуске.

В свойствах DaemonMapper1 есть параметр DaemonDefs, выбираем его и жмем добавить:

DaemonMapper

Добавив новый поток демона и выбрав его, мы должны увидеть его свойства:

Daemon

DaemonClassName по умолчанию это TDaemon1

Description Это описание нашей службы

DisplayName Отображаемое имя службы

Name Имя службы

Данных свойств достаточно для запуска нашей службы.

Теперь давайте напишем код. Выбрав DaemonUnit1 добавим в исходный код наш поток и опишем в переменной файл в который будет происходить запись:

DaemonUnit

Далее на событие 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 по умолчанию.

Для того чтобы активировать данный пакет нужно:

Зайти в Пакет-Установить/удалить пакеты

1

Выбираем anchordockingsgn, жмем кнопку Установить выбранное, после чего Сохранить и перезапустить IDE

2

Появляется окно с набором пакетов которое будет(было) добавлено в Lazarus, нажимаем Продолжить

3

После чего наш Lazarus запустится в новом образе.

4

Я был доволен как слон, пока не попытался запустить один из своих проектов, получив в ответ ошибку: TWinControl.WMSize loop detected

ошибка

5

Теперь наш Lazarus принял более удобный вид, по крайней мере для меня. Удачи в кодинге!

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда активна

Решил немного отойти от темы баз данных. И перейти в другое русло разработки, а именно в веб. Понадобилось для одного проекта сделать просмотрщик html страниц, попробовал компоненты для отображения html, оно конечно показывает, но не настолько хорошо как хотелось бы. Если на странице используются разные стили то отображение хромает, опять же с html5 у них проблема. Поэтому обратил свой взор в сторону компонентов webbrowser для Lazarus'а. Так будет проще и лучше. Опять же поддержка веб стандартов получше будет.

У Delphi есть компонент TWebBrowser на базе ослика. И его возможностей вполне хватает. Но вот для Lazarus'a такого компонента по умолчанию нет. Поэтому полез в веб искать что то путевое. Поиск удался. Среди найденного выделялись два компонента.

cef github

В о общем скачиваем исходники компонента. Распаковываем архив в какую либо папку. Я для это создал папку на диске С c:\lcl , и распаковал туда архив с исходником. Затем открываем Lazarus и выбираем пункт меню Пакет - Открыть файл пакета (.lpk)

lazarus memu packet

В появившемся диалоге выбора файла переходим в каталог куда у вас распакован код компонента и выбираем cef.lpk.

cef lpk

Появится окно установки пакета. В нем нажимаем сначала кнопку Компилировать, а затем выбираем Использовать - Установить.

cef packet install

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

ide build

Нажимаем Да и наблюдаем процесс компилирования разработки.

После этого на палитре компонентов появляется вкладка Chromium.

panel components

Теперь идем сюда и переходив в раздел Branch 2454 и скачиваем Test App для windows 32, если у вас другая версия операционной системы и среды Lazarus, то скачиваете под свою версию.

cef git branch

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

Теперь создаем новое приложение. У меня получилось такое.

lazarus webbrowser

Я добавил на форму компонент TСhromium, пару кнопок, и pagetab с двумя страницами. На одной разместил TСhromium, а на второй разместил TSynEdit (компонент с подсветкой синтаксиса), где будет отображаться исходный код страницы. А дальше написал не много кода для работы. Да и еще что бы все работа в раздел uses добавьте следующие юниты.

А теперь по работе с компонентом.

Код загрузки страницы.

Если требуется использовать при работе Cookie файлы то код немного видоизменяется.

После этого если вы допустим войдете на сайт через форму входа и нажмете запомнить на сайте, затем закроете программу и откроете снова то вы автоматически войдет на сайт.

Код получения html исходника страницы. По интернету гуляет кусок кода для работы с Chromium на Delphi,

для Lazarus он тоже подойдет. Но при компилирование будет выдаваться ошибка

Error: Wrong number of parameters specified for call to "StringVisitor"

Что бы её убрать в самом начале кода поменяйте директиву

И все нормально скомпилируется.

Пример получения подстветки кода сайта.

synedit colored

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

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

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда активна

Как видно из заголовка в данной статье пойдет разговор о работе с базами данных при помощи 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. Данная статья не претендует на звание самого умного документа, а просто показывает общие методы работы с базами данных.

Читайте также: