- Lazarus
- How To Write Lazarus Component/ru
- Contents
- Шаг 1: Создание пакета
- Шаг 2: Создание модуля
- Создание нового модуля
- Добавление существующего модуля
- Шаг 3: Создание значков для пакета
- Использование редактора изображений Lazarus
- Использование lazres
- Создание lrs-файла
- Создание res-файла
- Использование glazres
- Перекомпиляция пакетов
- Удаление пакетов
- Усовершенствование mycom.pas
- Использование встроенных (визуальных) компонентов
- Использование пользовательской процедуры рисования
- Интеграция компонента с IDE
- Редакторы свойств
- Редакторы компонентов
- Отладка компонента в Design-time
- См. также
Lazarus
Как нормально установить IDE Lazarus на Linux mint 17 QIana Я установил, но при попытке открыть его, выскакивают ошибки о том что пакет установлен, но не был найден. При этом FPC у меня работает и установлен. Палитры компонентов вообще нету — она пустая. Как эти ошибки исправить / установить стандартные компоненты
Я пытался перебить lazarus, но фиг там.
Кто сталкивался, Помогите
Парочка скринсшотов с ошибками явно ускорит процесс выяснения. 🙂
и еще очень много подобных ошибок типо компонент установлен
наверняка есть, но где-то что-то с путями не так.
Нам ведь не нужно знать, как ты его ставил, что у тебя за дистрибутив, да, мы ведь телепаты все тут.
Ох уж эти паскалисты.
Как ты ставишь-то? Apt-get? Уже поставил говоришь?
А поискать какие есть сопутствующие пакеты?(Может протупили засунуть в зависимости) То-то же.
И вообще, запусти его через консоль и скинь сюда «выхлоп» если таковой имеется — как правило в консоль сообщаются куда более внятные подробности, чем во всякие так любимые вами окошечки.
Я пытался перебить lazarus, но фиг там.
А? Что? Подробней давай. Твоя терминология мне незнакома.
Можно просто его скачать с сайта лазаруса и собрать, там уже всё есть 🙂
Вот только, чтобы собрать лазарус нужно собрать лазарус 🙂
Чтобы собрать лазарус нужен только рабочий FPC. А вот чтобы собрать FPC нужно собрать FPC)) Куда деваться, компилятор компилит сам себя
Он собирается из консоли, одной командой, главное чтобы fpc был установлен и cmake. Это добро можно взять в репах, оно там имхо должно быть 🙂
Источник
How To Write Lazarus Component/ru
Это руководство по созданию компонентов.
Contents
Шаг 1: Создание пакета
- В меню IDE Lazarus нажмите «Package» > «New package» для запуска диспетчера пакетов.
- Появится диалоговое окно «Save». Выберите папку и имя файла и нажмите «Save». Если программа IDE предложит использовать строчные имена файлов, нажмите «да».
- Поздравляем: вы только что создали свой первый пакет!
Шаг 2: Создание модуля
Вы можете создать новый модуль или использовать существующий файл. Оба варианта описаны ниже.
Создание нового модуля
- Используйте кнопку Add > New component.
- Выберите компонент, [например такой] как TComboBox.
- Выберите customcontrol1.pas в качестве Unit File Name и CustomControl1 в качестве Unit Name.
- Теперь вы можете задать иконку компоненту и определить, на какой палитре компонент должен появиться позже в Lazarus-IDE.
- Нажмите OK[, чтобы создать новый компонент].
- Установите пакет, кликнув кнопку Use -> Install вверху редактора пакетов.
- Теперь IDE спросит вас, должна ли она быть пересобрана. Ответьте «Да».
- Перезапустите Lazarus[, если он не сделал этого сам,] и посмотрите на свой новый компонент в палитре компонентов. Поздравляем: вы только что установили свой первый пакет с вашим первым компонентом.
Примечание: Если вы не видите свой новый компонент в палитре компонентов, скорее всего, вы используете не пересобранную версию Lazarus. Вы можете установить, где Lazarus пересобирается, используя [пункт меню] Tools -> Options -> Files -> Lazarus directory. Вместо прямого вызова Lazarus вы также можете использовать startlazarus, который запускает недавно созданный Lazarus, например исполняемый файл Lazarus в каталоге
/ .lazarus, если у вас нет доступа на запись в каталог, в который был установлен Lazarus.
Прим.перев. 23:36, 1 December 2018 (CET): В корневом каталоге Lazarus’а после пересборки обычно содержится три исполняемых файла: lazarus (текущий запускаемый файл), startlazarus (лаучер для lazarus) и lazarus.old (старая версия исполняемого файла, существующая после последней удачной пересборки среды). В примечании, вероятнее всего, речь идет о них.
Добавление существующего модуля
Если у вас уже есть модуль, вы можете добавить его в пакет:
- Нажмите кнопку Add, перейдите к вкладке Add Files. В [колонке] file name модуля добавьте ваш существующий файл. Нажмите Add files to package. Если диспетчер пакетов жалуется, что модуль находится вне заданных к модулям путей, нажмите «Да», чтобы добавить каталог в пути к модулям.
- Нажмите кнопку Add снова, перейдите на вкладку Add Files, найдите файл .lrs и нажмите «OK» (см. Шаг 3 о создании файла иконки).
- Снова нажмите кнопку Add, перейдите к вкладке New Requirement [(новая зависимость)]. В имени пакета выберите LCL и нажмите OK.
Конечный результат должен выглядеть следующим образом:
- Щелкните по дереву файлов в диспетчере пакетов. В свойствах файла убедитесь, что установлен флажок Register unit.
- Нажмите кнопку Options. Перейдите на вкладку IDE Integration. В опции Package Type убедитесь, что выбраны [режимы] Designtime и Runtime.
- Нажмите кнопку Compile, чтобы проверить, файлы компилируются без ошибок.
- Нажмите кнопку Install. Lazarus автоматически пересоберется и перезагрузится.
Компонент создан и готов к использованию:
Шаг 3: Создание значков для пакета
Вы должны создать PNG-файлы размером 24×24 пикселя в виде значков. Если для Lazarus 1.8+ вы хотите, чтобы значки палитры масштабировались при более высоких разрешениях экрана, вы также должны предоставлять значки 36×36 и 48×48 пикселей. Имена более крупных значков требуют добавления [суффиксов] «_150» и «_200» к имени файла, соответственно [увеличению разрешения] («_150» для 150%, «_200» для 200%).
FPC способен использовать стандартные файлы ресурсов .rc или скомпилированные ресурсы .res, [начиная] с версии fpc 2.6. См. FPC ресурсы. [О файлах] .lrs: см.ниже.
Использование редактора изображений Lazarus
Вы можете использовать Lazarus Image Editor для создания изображений в .lrs формате.
Прим.перев. 17:13, 3 December 2018 (CET): Поскольку старшие версии Лазаруса (насколько я помню, после v.1.6.х точно) позволяют задавать иконку изображения в png-формате, то удобнее всего для их создания использовать бесплатный векторный редактор InkScape, «родным» для которого является формат SVG. Среди его преимуществ:
- работа со слоями
- поддержка альфа-канала
- предосмотр иконок в разных разрешениях (в файле настроек можно задать даже нестандартные значения)
- вменяемый и оперативный саппорт (можно напрямую пообщаться с разработчиками в чате)
- экспорт изображений в png-формат
Использование lazres
lazres обычно находится в каталоге инструментов Lazarus.
Вам может понадобиться скомпилировать lazres при первом использовании. Просто откройте lazres.lpi в среде IDE и нажмите run > build в меню.
Создание lrs-файла
Для создания lrs-файла запустите:
или, если доступны изображения с высоким разрешением
- samplepackage — имя вашего пакета
- TMyCom — имя вашего компонента. Имя изображения должно совпадать с именем вашего компонента!
Вы можете добавить несколько изображений в файл lrs, добавив имя файла изображения в конец [команды]. Например:
Ниже приведен образец полученного файла samplepackage.lrs.
Обязательно включите свой файл ресурсов в исходник нового компонента, добавив нижеследующее в модуль вашего компонента и включив «LResources» в раздел uses
Создание res-файла
lazres также может создать скомпилированный файл ресурсов, просто укажите файл с расширением .res, например:
или, для иконок с высоким разрешением:
В этом случае вместо включения файла lrs в разделе инициализации просто укажите файл ресурсов в любом месте исходного файла компонента
Использование glazres
GLazRes это графическая версия lazres, которая может собирать файлы в файл ресурсов Lazarus (.lrs). Его можно найти в каталоге инструментов установки Lazarus.
Перекомпиляция пакетов
Вам нужно пересобирать пакет каждый раз, когда вы вносите изменения в файл mycom.pas. Чтобы пересобрать пакет, откройте файл samplepackage.lpk в диспетчере пакетов и нажмите кнопку Install.
Удаление пакетов
- Чтобы удалить установленные компоненты: в меню IDE выберите Package > Configure installed packages. На следующем рисунке показан инструмент Installed Packages.
- Выберите пакет, который вы хотите удалить, и нажмите Uninstall selection.
Если что-то пойдет не так с пакетом (например, каталог пакета удаляется без деинсталляции [пакета в первую очередь]), Lazarus может не разрешить вам удалять пакеты. Чтобы устранить проблему, в меню IDE выберите Tools > Build Lazarus. Lazarus пересоберет все пакеты и перезапустит их. Теперь вы можете удалить проблемные пакеты.
Усовершенствование mycom.pas
- Код в mycom.pas выше дает вам основы того, что вам нужно для создания компонента. Далее приведена усовершенствованная версия с некоторыми советами о том, как писать процедуры и события для компонентов.
- OnChange2 показывает, как создавать события.
- OnSample показывает, как создавать пользовательские события.
- MyText и MyText2 показывает различные способы записи свойств.
- Вы можете использовать TComboBox вместо TCustomComboBox в качестве базового класса, который [объявляет] публичными все свойства как TComboBox.
- Если TCustomComboBox используется в качестве базового класса, вы заметите, что в Инспекторе объектов IDE будет отсутствовать множество свойств и событий. Чтобы добавить эти свойства и события, просто скопируйте и вставьте свойства, перечисленные ниже [комментария] // properties from TComboBox. Этот список свойств можно получить из объявления TComboBox в модуле StdCtrls. Исключите [из списка] любое свойство, которое вы хотите [определить] самостоятельно.
Также вы заметите, что в Инспекторе объектов IDE существуют некоторые необъявленные и, возможно, нежелательные элементы. Чтобы удалить те из них, которые вам не нужны, вы можете переобъявить их в разделе Published как простые переменные. Например:
Использование встроенных (визуальных) компонентов
Можно использовать стандартные компоненты, встроенные в ваши собственные компоненты (посмотрите для примера на TLabeledEdit или TButtonPanel).
Предположим, вы хотите создать пользовательскую панель с TLabel на ней. С помощью описанных выше шагов можно создать базовый пакет и исходные файлы. Теперь сделайте следующее для добавления TLabel в компонент:
- Добавьте приватный атрибут (поле) для компонента label (FEmbeddedLabel: TLabel;).
- Добавьте published-свойство только для чтения для компонента label (property EmbeddedLabel: TLabel read FEmbeddedLabel;)
- Создайте label в конструкторе (переопределенном) компонента (FEmbeddedLabel: = TLabel.Create(self);)
- Задайте родительский элемент компонента (FEmbeddedLabel.Parent: = self;)
- Если встроенный компонент не является ‘субкомпонентом’ по умолчанию (например, TBoundLabel, TPanelBitBtn и т.д.), то добавьте вызов в SetSubComponent. Это необходимо для IDE, чтобы она знала, что она также должна хранить свойства встроенного компонента. По умолчанию TLabel не является субкомпонентом, поэтому необходимо добавить вызов метода (FEmbeddedLabel.SetSubComponent(true);).
В итоге вы получите что-то вроде этого (показаны только основные части):
Использование пользовательской процедуры рисования
Вы всегда можете переопределить компонент внутри вашей программы. Например, это реализует пользовательскую процедуру Paint для TLabel:
Теперь вы можете создать MyLabel внутри вашей программы во время выполнения с этой переопределенной процедурой Paint вместо стандартной.
Для большинства компонентов и для большинства методов было бы полезно вызвать унаследованную процедуру внутри него:
Однако унаследованное поведение нежелательно в этом случае, поскольку второе действие записи будет перекрывать первый (унаследованный).
Интеграция компонента с IDE
Редакторы свойств
Редакторы свойств предоставляют настраиваемые диалоги для редактирования свойств в инспекторе объектов. Для большинства свойств, таких как строки, строковые списки, изображения, перечисленные типы и другие, уже есть редакторы свойств по умолчанию, но если у пользовательского компонента есть особый вид свойства, для изменения свойства может потребоваться настраиваемый диалог.
Каждый редактор свойств — это класс, который должен происходить из TPropertyEditor или одного из его потомков и реализовывать методы этого базового класса. Они должны быть зарегистрированы в процедуре ‘Register’, используя функцию RegisterPropertyEditor из модуля PropEdits. Это стандарт для имен редакторов свойств с именем свойства, за которым следует [слово] ‘Property’, например [имя] TFieldProperty для редактора свойств свойства TField.
Хорошим примером для редактора свойств является редактор свойств TFont.
Один из наиболее распространенных случаев для редакторов свойств — это свойства, которые являются классами. Поскольку классы имеют много полей и могут иметь различные форматы, Lazarus не может иметь [универсальное] поле редактирования в инспекторе объектов, способное их редактировать, [как это сделано,] например, для строк и числовых типов.
Для классов соглашение состоит в том, чтобы в поле значений постоянно отображалось имя класса в круглых скобках, например «(TFont)», а кнопка «. » показывала диалог для редактирования этого класса. Это поведение, за исключением диалога, реализуется стандартным редактором свойств для классов, называемых TClassPropertyEditor, который может быть унаследован при создании редакторов свойств для классов:
Возвращаясь к примеру TFont, наследование от TClassPropertyEditor уже предлагает часть желаемого поведения, а затем классу TFontPropertyEditor необходимо реализовать отображение диалога в методе Edit и установить атрибуты для редактора:
Редакторы компонентов
Редакторы компонентов управляют поведением компонентов по щелчку правой кнопкой мыши и двойному щелчку в дизайнере форм.
Каждый редактор компонентов — это класс, который должен происходить от TComponentEditor или одного из его потомков и реализовывать методы из этого базового класса. Он должен быть зарегистрирован в процедуре ‘Register’, использущей функцию RegisterComponentEditor из модуля ComponentEditors. Это стандарт для именования редакторов компонентов с именем компонента, за которым следует [слово] ‘Editor’, например TStringGridComponentEditor для редактора свойств компонента TStringGrid. Хотя редакторы пользовательских компонентов должны быть основаны на TComponentEditor, большинство его методов на самом деле [берут начало] от предка, поэтому необходимо также знать TBaseComponentEditor:
Наиболее важным методом редактора компонентов является [метод] Edit, который вызывается по двойному щелчку на компоненте. Когда вызывается контекстное меню для компонента, запрашивается метод GetVerbCount и GetVerb для создания меню. Если выбран один из глаголов (что означает пункты меню в этом случае), вызывается ExecuteVerb. Существует редактор компонентов по умолчанию (TDefaultEditor), который реализует Edit для поиска свойств компонента для наиболее подходящего для редактирования. Обычно он выбирает событие, которое будет редактироваться, путем добавления скелета кода в редактор кода и установки курсора в это место.
Другими важными методами из TBaseComponentEditor являются:
- ExecuteVerb(Index) — Выполняет один из дополнительных пунктов меню, расположенных во всплывающем меню правой кнопки мыши;
- GetVerb – Возвращает имя каждого дополнительного пункта всплывающего меню. Обратите внимание, что редактор компонентов должен размещать специальные символы заголовка элемента, такие как &, для создания ускорителя клавиатуры и «-» для создания разделителя;
- GetVerbCount – Возвращает количество элементов, которые будут добавлены во всплывающее меню. Индекс для подпрограмм GetVerb и ExecuteVerb равен нулю, начиная от 0 до GetVerbCount — 1;
- PrepareItem – Вызывается для каждого глагола [(GetVerbCount и GetVerb)] после создания пункта меню. Позволяет настраивать элемент меню, например, добавляя подэлементы, добавляя флажок или даже скрывая его, устанавливая Visible в false;
- Copy — Вызывается, когда компонент копируется в буфер обмена. Данные компонента при использовании Lazarus’ом всегда будут [только] добавляться и не могут быть изменены. Этот метод предназначен для добавления различных типов из буфера обмена при вставке компонента в другие приложения, но не будет влиять на вставку в Lazarus’е.
Простым и интересным примером является редактор компонентов TCheckListBox, который создает диалоговое окно для редактирования. Более удобный, чем реализация всех методов из TBaseComponentEditor, [он] наследуется от TComponentEditor, и это то, что делает TCheckListBoxEditor. Этот базовый класс добавляет пустые реализации для большинства методов и некоторые умолчательные для других. Для [метода] Edit он вызывает ExecuteVerb(0), поэтому, если первый пункт [popup menu] будет сопоставлен действию двойного щелчка мыши, что является условным обозначением для редактора, то нет необходимости в [ручной] реализации [кода метода] Edit. Это основное действие для двойного щелчка и первого элемента меню часто является диалогом, и для TCheckListBox это также реализуется [так]:
Отладка компонента в Design-time
Чтобы отловить ошибки времени разработки во (вновь созданном) dbgcomponent:
- откройте проект C:\lazarus\ide\lazarus.lpi;
- запустите проект;
- установите точку останова в dbgcomponent в главном (1-ом) приложении;
- используйте паскалевский код dbgcomponent во втором приложении;
- выполнить пошагово код компонента времени разработки в режиме отладки; делайте все, что необходимо;
См. также
- Extending the IDE
- Lazarus Packages — A guide for creating a package under Lazarus
- Components and Code examples
- Lazarus Components
- IDE Window: Add to Package
- IDE Window: Create new package component
- Создание визуальных компонент для Lazarus — статья Сергея Смирнова с русскоязычного ресурса
Все вопросы вы можете оставлять также на этой странице
Источник