lazarus связь между формами

Работа с формами Lazarus

Эта статья врядли будет интересна тем, кто раньше программировал в Delphi. Она в большей степени рассчитана на программистов VB, MS Access и других средств быстрой разработки. В каждой системе существуют свои правила и подходы, касающиеся программного открытия экранных форм, а также передачи и возврата пареметров. Вот я и хочу рассказать о том, как это сделано в Lazarus. При этом я предполагаю, что читатель достаточно хорошо понимает принципы ООП и уже знаком с синтаксисом языка Free Pascal.

Открытие форм в модальном режиме

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

В качестве примера создадим новый проект и на главную форму поместим пару полей ввода и кнопок:

lazarus forms modal1

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

lazarus forms modal2

В качестве программного интерфейса для передачи параметра будем использовать свойство TestValue, которое определим в секции public класса формы. Также определим и реализуем более чем очевидные методы для установки и считывание значения свойства, а также обработчик события нажатия на кнопку, в котором свойству формы ModalResult присваивается значение mrOK, что и приводит к закрытию (но не уничтожению!) формы.

Однако, самый большой интерес представляет функция RunTestForm. Как можно заметить, она определена вне класса формы, хотя и в том же модуле. Это может показаться странным программистам VB, где модуль класса полностью отождествляется с самим классом. Как и в Delphi, в Lazarus это не так. Хотя в одном модуле можно определить только одну форму (иначе визуальный дизайнер форм не сможет работать), другие элементы приложения не обязательно реализовывать отдельно. В нашем случае функция RunTestForm содержит код, необходимый для создания формы, передачи ей начального значения поля ввода и возврата отредактированного значения. Очевидно, что RunTestForm по смыслу связана с классом формы, поэтому будет разумно (хотя и вовсе не обязательно) расположить её в модуле формы.

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

Вот и всё. Только не забудьте в свойствах проекта удалить дополнитетьную форму из списка автоматически создающихся форм. Теперь можно потестировать, то, что у нас получилось. Запустите программу и понажимайте кнопки на главной форме. Обратите внимание, что пока дополнительная форма присутствует на экране, Вы не можете перевести фокус на какую-либо другую форму, как и положено для модального режима. И наверняка Вы подумаете, что такое поведение не всегда является подходящим. Вот это и обсудим далее.

Открытие форм в немодальном режиме

lazarus forms1

Обратите внимание, что мы задекларировали новый метод FillWindowsList, который как раз и выполняет заполнение списка форм приложения. Его реализация не слишком сложна: Здесь есть некоторый интересный момент. Дело в том, что объект Application содержит единый список всех компонент, которыми владеет, поэтому приходится проверять, что очередной компонент является именно TForm.

Однако, что толку просто выводить список форм. Нужно сделать так, чтобы можно было переключиться на любую из них. В реальном приложении это, конечно, лучше сделать с помощью меню, но код получится несколько более громоздким, поэтому в нашем простом примере во-первых будем использовать список, а во-вторых опустим необходимые в реальном приложении проверки. Ниже представлен весь код секции реализации модуля основной формы. Обратите внимание, что вызывая метод RunTestForm мы уже не ждём возвращаемого значения, но зато вызываем процедуру заполнения списка окон приложения.

Теперь создадим дополнительную форму, которую будем открывать из главной формы в немодальном режиме. Внешне она ничем не будет отличаться от рассмотренной в предыдущей главе модальной формы, а вот код несколько изменится. Обратите внимание, что свойство TestValue теперь только для записи, а метод RunTestForm стал процедурой вместо функции.

Реализация тоже довольно сильно изменилась. Показ формы теперь производится вызовом метода Show, а не ShowModal, поэтому выполнение программы не передаётся в создаваемую форму до её закрытия, а продолжается. О закрытии и освобождении ресурсов теперь должна заботиться сама форма. Для этого в процедуре обработки события закрытия формы мы присвоим переменной CloseAction значение caFree. Нажатие на кнопку теперь вызывает не установку значения ModalResult, а явное обращение к методу Close.

Если Вы не просто читали эту статью, а создавали попутно описанную тестовую программу, самое время её запустить. Только снова не забудьте убрать дополнительную форму из списка автоматически создающихся при старте приложения.

Источник

Lazarus Tutorial/ru

Contents

Обзор

Lazarus это бесплатный инструмент разработки с открытым кодом, предназначенный для также бесплатного компилятора с открытым кодом Free Pascal (object pascal). IDE Lazarus (screenshot) это стабильная богатая возможностями среда разработки для создания самостоятельных графических и консольных приложений. В настоящее время она работает на Linux, FreeBSD и Win32 и предоставляет настраиваемый редактор кода и визуальную среду создания форм вместе с менеджером пакетов, отладчиком и GUI полноcтью интегрированным с компилятором FreePascal.

Найдите, установите(Installing Lazarus) и запустите Lazarus, который кроме того содержит и компилятор FreePascal.

На экране появятся несколько окон: главное окно вверху, Инспектор Объектов (Object Inspector) слева, занимаюший большую часть экрана Редактор Кода Lazarus (Lazarus Source Editor), и готовое к использованию окно Form1 поверх окна Редактора.

В главном окне сверху, под строкой меню располагается строка вкладок. Если вкладка ‘Standard’ еще не выбрана, выберите ее, щелкнув на ней левой кнопкой мыши. Затем найдите иконку Button (прямоугольник с текстом ‘Ok’ на нем) и щелкните на ней мышкой. Затем щелкните в окне Form1, где-нибудь слева от середины. Появится затененный прямоугольник с надписью ‘Button1’. Вновь щелкните на иконке Button на вкладке Standard и щелкните на Form1 где-нибудь справа от центра: появится прямоугольник с надписью ‘Button2’.

Теперь щелкните на Button1 чтобы выбрать ее. Инспектор Объектов отобразит свойства объекта Button1. Не далеко от верхнего края располагается свойство с именем ‘Caption’, в котором отображается значение ‘Button1’. Щелкните в этой строке и измените ‘Button1’ на ‘Нажми меня’ (прим.пер.: в оригинальном тексте ‘Press’. Далее будет приводиться только русский текст надписей, а оригинальный можно посмотреть на странице с английским текстом). Если вы нажмете клавишу ENTER или щелкнете в другой строке, то увидите, что надпись на первой кнопке Form1 изменилась на ‘Нажми меня’. Теперь щелкните в Инспекторе объектов на вкладке Events (События) и вы увидите различные события, на которые может реагировать кнопка. Среди них OnClick, OnEnter, OnExit и так далее. Щелкните в строке справа от OnClick: появится маленькая кнопка с троеточием (. ). Если вы ее нажмете, то автоматически перенесетесь в Редактор Кода и курсор окажется в участке кода, начинающегося с:

Нажмите F12 для переключения от Редактора Кода к окну формы Form1.

Теперь отредактируйте свойства кнопки2 (Button2): щелкните на Button2 для отображения ее свойств в Инспекторе Объектов. Измените свойство Caption на ‘Выход’ вместо ‘Button2’. Теперь перейдите на вкладку событий (Events) и щелкните в строке OnClick. Щелкните на кнопке с троеточием и перенеситесь в Редактор Кода, в тело другой процедуры:

Теперь нажмите F12 чтобы увидеть форму Form1 вновь. Теперь вы можете попытаться скомпилировать. Простейшим способом сделать это является выбор в главном меню пункта ‘Run’ а в появившемся подменю пункта ‘Run’. Вы также можете просто нажать клавишу F9. Сначала произойдет компиляция, а затем (если все в порядке) линковка и запуск вашей программы.

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

Попробуйте щелкнуть на кнопке ‘Нажми меня’. Вы увидите, что надпись на ней сменится на ‘Нажми еще раз’. Если вы нажмете еще раз, то на кнопке так и останется надпись ‘Нажми еще раз’!!

Теперь щелкните на кнопке с надписью ‘Выход’. Окно закроется и программа завершится. Вновь появится окно формы Form1 с точечной сеткой, готовое для редактирования.

Теперь (и вообще почаще) вы можете сохранить свою работу выбрав последовательно пункты меню Project > Save Project As > имя_вашего_файла.pas

Вторая попытка.

Вновь откройте сохраненный вами проект.

На форме Form1 щелкните на кнопке ‘Нажми меня’ (Button1) чтобы выбрать ее. В Инспекторе Объектов перейдите на вкладку событий (Events), щелкните на строке справа от события OnClick, щелкните на кнопке с многоточием, чтобы перенестись к соответствующему участку кода в Редакторе.

Измените код, на приведенный ниже:

Сохраните проект, перекомпилируйте и запустите. Левая кнопка теперь циклически меняет свой текст с одного сообщения на другое.

Если вы хотите писать консольные или программы с текстовым интерфейсом на Pascal (например, если вы следуете стандартному курсу изучения программирования на Pascal, или вам нужно написать программу для работы в командном режиме или системную программу) вы также можете использовать Lazarus для написания, компилирования и выполнения ваших программ. Это прекрасная среда для программирования на Pascal. Смотри Console Mode Pascal.

Редактор

Когда вы запускаете Lazarus в первый раз, на вашем рабочем столе появляется набор несвязанных ‘плавающих’ окошек.

Lazmain

Под окном редактора Lazarus слева располагается окно Инспектора Объектов, а справа Редактор Исходного Кода (Lazarus Source Editor). Может быть и другое окно меньшего размера, озаглавленное Form1, расположенное поверх Редактора Исходного Кода. Если его в данный момент не видно, то можно переключиться к нему, нажав клавишу F12, которая позволяет переключаться между Редактором Исходного Кода и Окном Формы. Окно формы это то место, где вы разрабатываете графический интерфейс вашей программы, а в Редакторе Исходного Кода отображается разрабатываемый вами Pascal-код вашего приложения. Использование Инспектора Объектов детально обсуждается ниже после описания Палитры Компонентов.

Когда вы начинаете новый проект (или впервые запускаете Lazarus) по умолчанию создается стандартная форма, состоящая из прямоугольника с точечной сеткой для более легкого позиционирования различных компонентов на форме и системная строка сверху, которая обычно содержит кнопки Свернуть, Развернуть и Закрыть. Если вы щелкните мышкой в любом месте формы, вы увидите ее свойства в Инспекторе Объектов у левого края экрана.

Другие окна, которые могут появиться в процессе работы: Инспектор проектов, содержащий сведения о файлах, включенных в проект, и позволяющий вам добавлять и удалять файлы из проекта; Окно Messages (Сообщения), отображающее сообщения компилятора, ошибки и отчеты по вашему проекту; если Lazarus был запущен из терминала, то это окно остается запущенным и в нем отображаются подробные сообщения компилятора.

Главное меню

Главное текстовое меню содержит следующие пункты: File Edit Search View Project Run Components Tools Environment Windows Help

Как обычно любой пункт можно выбрать если навести на него курсор и нажать левую кнопку мыши или использовать горячие клавиши (например, клавиатурная комбинация Alt+F открывает меню File. Если меню не открылось, то следует нажимать TAB до тех пор, пока не будет активировано желаемое окно.

Меню Файл (File)

Меню Правка (Edit)

Меню Поиск (Search)

Меню Вид (View)

Управляет отображением на экране различных окон и панелей.

Вкладка События также имеет два столбца: левый содержит возможные события вроде нажатия кнопки мыши, ассоциированные с данным компонентом, а правый показывает действия, предусмотренные для этих событий. Если действие не определено, то нажатием на кнопку с точками

открывается Редактор Исходных текстов, где курсор уже находится в области объявления процедуры, ожидая ввода программы обработки данного события.

Меню Проект

Меню Запуск

Меню Пакет

Меню Сервис

Меню Окружение

Большинство этих установок сгенерированы автоматически, и только для чтения.

Меню Окно

Содержит список открытых файлов и доступных окон вроде Редактор Исходного Кода, Инспектор Объектов и Инспектор Проекта. Щелчком на имени одного из окон оно выводится «наверх» и получает фокус.

Меню Справка

Имеется три выбора:

Сейчас, по умолчанию, если поместить курсор на ключевое слово из FreePascal Components Library FCL, или из RunTime Library RTL (но не из Lazarus Components Library LCL) и нажать >, то будет показано подходящее определение на сайте. ЭТА СЕКЦИЯ ПОКА ВСЕ ЕЩЕ В ПРОЦЕССЕ РАЗВИТИЯ.

В конечном счете, найдется полная диалоговая услуга Справки с информацией о синтаксисе Pascal, работе с IDE, как использовать, изменять, или создавать компоненты, подсказки о том, как выполнять определенные задачи. Эта часть секции Документация (то, что Вы читаете сейчас) представляет собой начальный этап процесса. Нам нужна помощь любого, кто в силах оказать еe: WiKi очень упрощает редактирование.

Кнопочная панель

Маленькая панель в левой верхней части основного окна, слева от палитры компонентов, имеет набор кнопок, повторяющих наиболее часто применяемые выборы основного меню:

Создать модуль, Открыть (со стрелкой вниз для отображения списка недавно использованных файлов), Сохранить, Сохранить все, Создать форму, Переключить Форма/Модуль (т.е. показать либо форму, либо модуль исходного кода), Показать модули, Показать формы, Запуск (т.е. компиляция и выполнение), Пауза, Шаг со входом, Шаг в обход (последние два – функции отладчика).

Палитра Компонентов

Это панель инструментов с вкладками, показывающая множество иконок, представляющих обычно применяемые компоненты при построении форм.

Каждая вкладка представляет собой набор иконок, составляющих функциональную группу компонентов. Самая левая иконка на каждой вкладке в виде стрелочки называется Средством Выбора.

Если навести курсор мыши на иконку палитры компонентов без нажатия, появится название данной компоненты. Заметьте, что каждое название начинается с ‘T’, что означает ‘Тип’, а точнее ‘Класс’ компоненты. При выборе компоненты для размещения на форме, Class добавится в секцию type раздела interface модуля (обычно в виде части на TForm1), и instance (образец) этого класса добавится в секцию var (обычно как переменная Form1). Все Methods (методы), разработанные для формы или ее компонент (процедуры или функции) будут помещены в раздел implementation модуля.

В приведенном ниже списке компонентов можно найти связи с файлами, которые содержат описания модулей, в которых они найдены. Если нужно узнать о свойствах конкретного компонента, зачастую следует обратить внимание на Наследование этого компонента и просмотреть свойства базового типа, из которого он произведен. Например, для изучения TMaskEdit очень полезно просмотреть TCustomMaskEdit.

ВКЛАДКИ (их имена понятны и не требуют разъяснений):

Некоторые полезные процедуры или функции группы Dialog не размещены на Палитре, но легко применяются путем прямого вызова из исходной программы.

Некоторые примеры не будут сначала работоспособны: понадобится настройка путей и разрешений для файлов и папок. При желании скомпилировать пример убедитесь, что для файлов и папок установлены разрешения read/write/execute, или скопируйте файлы в папку с подходящими разрешениями.

Попробуйте выполнить программу ‘testall’ для просмотра меню доступных компонентов совместно с маленькими примерами тестовых форм для большинства из них; затем просмотрите исходный код для понимания принципов их работы!

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

Отладчик

Писал и редактировал: Romlo

Настройки

Чтобы пользоваться отладчиком, должны быть установлены галочки:

проект > параметры компилятора > вкладка «Связывание» >

Кнопки

Управление отладкой производится вот этими пятью кнопками:

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

Трассировка

str debugger

После нажатия на «запуск», знак вопроса в кружке должен смениться галочкой. Если вместо галочки там крестик, значит, точка останова не была установлена по каким-то причинам. В этом случае лучше ещё раз проверить настройки и перезапустить Lazarus. Если же всё получилось, продолжим. Далее, нужно вызвать то событие, при котором начнёт выполняться данный участок кода (то есть если вы поставили точку останова в начале button1_click, например, то теперь вам надо нажать эту кнопку). При этом должен показаться редактор кода. Ранее красная строчка теперь станет серой, а галочка в кружке сменится стрелочкой:

str2 debugger

Отдельно надо сказать, что «Шаг со входом» не работает, если функция, на которой вы «стоите», экспортирована из библиотеки (например, в WinAPI-функцию вы зайти не сможете).

Также имеется возможность просматривать содержимое переменных, для этого надо просто навести на неё мышку прямо в редакторе кода, во всплывающей подсказке будет указан адрес переменной и её содержимое:

var debugger

Ну и в дополнение к сказанному добавлю, что чтобы продолжить выполнение программы в обычном режиме (если вам надоело её трассировать), достаточно нажать кнопку «запуск». Ну а чтобы убрать точку останова, надо закрыть приложение и ещё раз щёлкнуть по номеру строки, на которой эта точка стоит. ну и после этого заново откомпилировать приложение.

Файлы Lazarus

Когда вы выполняете сохранение на самом деле вы сохраняете два файла:

(Вы сохраняете и больше, но это те файлы, которым вы даете имена). Файл проекта (lpr) и файл модуля (pas) должны иметь разные имена, потому что Lazarus присваивает имя модулю (в исходном коде) также, как и имя файла модуля, а программе по имени файла проекта (это необходимо сделать иначе компилятор может впоследствии не найти модуль по ссылке на него в файле проекта). Во избежание противоречий (ошибок) следует изменить все упоминания Unit1 на xxx.

Итак, если вы сохранили проект под именем again, то попытка сохранить again.pas и again.lpr приведет к ошибке, потому что имена модуля и программы одинаковы, что приводит к ошибке двойного именования.

Ниже приведен пример именования:

Заметьте, что появилось более двух файлов, как следовало бы ожидать.

Ниже приведена краткая справка по каждому файлу:

again.exe: Основной исполняемый файл программы. Win32 добавляет расширение «exe». Linux этого не делает. В Linux это файл будет иметь большой размер вследствие того, что включает отладочную информацию. Запустите утилиту «strip» чтобы удалить ее и значительно снизить размер исполняемого файла.

again.lpr: Исходный код основной программы. Не смотря на специфичноое для Lazarus расширение на самом деле это обычный Pascal-код. Он содержит строку Uses, помогающую компилятору найти все необходимые модули Отметим, что программа называется не аналогично имени данного файла.

again.lrs: Это автоматически генерируемый файл ресурсов. Заметьте, что это не файл ресурсов Windows.

againu.pas: Модуль, содержащий код формы.

again.ppu: Это скомпилированный модуль.

ppas.bat: Это простой скрипт, связывающий программу для создания выполняемого файла. Если компиляция успешна, он удаляется компилятором.

Авторство и изменения

Эта страница была импортирована из epikwiki версии.

Источник

Lazarus связь между формами

Муниципальное образовательное учреждение

дополнительного образования детей центр дополнительного образования детей

«Сланцевский центр информационных технологий»

Занятие по программе «Программирование в Lazarus » на тему «Работа с формами в Lazarus » Кочергиной Кристины Николаевны, педагога дополнительного образования

Тема «Работа с формами в Lazarus »

научить учащихся получению инструментальных знаний через привитие навыков использования компьютера для разрешения учебной ситуации;

образовательная : знакомство со средой Lazarus : компоненты, свойства, события, методы; овладение навыком работы с программой; познакомить с понятием переменных, изучить типы данных и их совместимость. Познакомится с основными арифметическими операциями и функциями;

развивающая : повышение интереса к процессу программирования в информатике; развитие познавательного интереса, логического мышления, речи и внимания учащихся, формирование информационной культуры и потребности приобретения знаний;

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

Тип занятия: занятие совершенствования знаний, умений и навыков, целевого применения усвоенного.

Вид занятия: комбинированный урок-практикум.

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

Кроме того мы изучим новый компонент TRadioGroup для создания групп переключателей.

Научимся применять условный оператор для анализа состояния переключателей.

Форма является объектом, отсутствующим на палитре компонентов. Чтобы добавить новую форму в проект, нужно выбрать команду Файл → Создать форму или щелкнуть кнопку Создать форму на панели инструментов.

hello html 75050a2d

Появится новая пустая форма. Называться она будет Form2, а соответствующий ей файл с исходными текстами добавиться в Редактор кода на новую вкладку Unit2.

hello html 5f229312

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

Если же требуется отобразить окно как модальное, то есть так, чтобы, не закрыв его, пользователь не мог переключиться на другое окно этого же приложения, то вместо метода Show следует использовать метод ShowModal:

Форма окна, скрытого методом Hide, не уничтожается, и это окно в любой момент можно снова отобразить. Все объекты форм уничтожаются (освобождают память) автоматически при завершении работы приложения.

Основные методы формы:

Close — закрывает форму;

Hide — форма становится невидимой;

Show — показать форму;

ShowModal — показать форму в модальном режиме. Когда форма показана в модальном режиме, приложение не может выполняться, пока форма не будет закрыта.

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

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

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

Задание. Создать приложение с тремя формами: Главная, Опции и О программе. Форму Опции вызывать в обычном окне. Для вызова формы О программе использовать модальное окно.

На рисунке показаны главная форма и подформы нашего нового проекта.

hello html 6d03bee

Ход выполнения проекта

Создайте новое приложение, сохраните файлы проекта в папке « Okna ».

Разместите на форме Form1 3 кнопки, измените свойства объектов в соответствии с таблицей.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • lazarus работа с формами
  • lazarus приложение для android