Lazarus Documentation/ru
In addition to this site, the latest version of the documentation can also be found online and in a variety of downloadable formats on the main Free Pascal Compiler site. There is now also a WiKi site for FreePascal [1] very similar in style to this one, to allow developers to submit documentation in addition to the official FPC documents below.
- User’s guide
- Programmer’s guide
- Reference guide for the system unit, and supported Pascal constructs
- Run-Time Library reference manual
- Free Component Library reference manual
- Free Pascal documentation tool manual
- Build messages
Кроме того, существуют переводы на русский язык:
- Документация по Free Pascal и Lazarus
- Справочное руководство Free Pascal (перевод Reference guide)
- Руководство программиста Free Pascal (перевод Programmer’s guide)
Блоги и сайты связанные с Lazarus
- Блог Lazarus программиста — Русский блог о программировании в Lazarus
- Lazarus Development — A blog of lazarus developers regards development process.
- Adventures of a Newbie — A blog of a newbie getting started with some tutorial information in a running log.
- On the road with Lazarus/Freepascal — A blog dedicated to register my experiences while programming with Lazarus and Freepascal (by Luiz Américo)
- Porting to Lazarus — This blog describes the porting of a medium-sized application (~100 kloc) from D7 with CLX to Lazarus (by Alexsander da Rosa)
- Living Lazarus — One mans exploration into the possibilities of an open source RAD (by Wibblytim).
- Bee.ography just (another) Bee’s buzz!
- Parallel Pascal Worlds Donald Shimoda.
- swainbrain pascal wiki — unique free pascal tutorials and info swainbrain
Категории, с которых удобно начать поиск в wiki
- Category:Main — Категория верхнего уровня для всех категорий на английском языке.
- Category:Main/ru — Категория верхнего уровня для всех категорий на русском языке.
- Category:AllCtg/ru — Список всех категорий на русском языке без учёта иерархии.
- Category:Russian — Список всех страниц на русском языке без учёта иерархии.
- Category:Portals — Подборки ссылок по отдельным темам.
Jesus Christ Raises Lazarus from the Dead
To help each child understand that because Jesus Christ is the Son of God, he has power over death.
Preparation
- Prayerfully study John 11:1–46. Then study the lesson and decide how you want to teach the children the scripture account. (See “Preparing Your Lessons,” p. vi, and “Teaching from the Scriptures,” p. vii.)
- Review Luke 7:11–17; 8:41–42, 49–56.
- Select the discussion questions and enrichment activities that will involve the children and best help them achieve the purpose of the lesson.
- Materials needed:
- A Bible or a New Testament for each child.
- A newly cut twig or leaf and a dead one (or a picture of each of these).
- Pictures 7-27, Jesus Raising Lazarus from the Dead (Gospel Art Picture Kit 222; 62148), and 7-18, Jesus Blessing Jairus’s Daughter (Gospel Art Picture Kit 215; 62231).
Suggested Lesson Development
Invite a child to give the opening prayer.
Show the children the newly cut twig or leaf and the dead one. Ask the children to talk about the difference between the two.
- Is there anything we can do to make a dead twig look like the newly cut twig?
- Now that the newly cut twig has been cut off from the plant, what will happen to it?
- Who has power to bring life back to something that is dead?
Explain that Jesus has power over death. He brought several people who had died back to life.
Briefly review the accounts of Jesus raising the widow of Nain’s son (Luke 7:11–17) and Jairus’s daughter (Luke 8:41–42, 49–56). Then teach the children the account of Jesus raising Lazarus from the dead as found in John 11:1–46. Show the pictures at appropriate times. (For suggested ways to teach the scripture account, see “Teaching from the Scriptures,” p. vii.) Explain that when Jesus raised people from the dead, he performed miracles that testified that he was the Son of God and had power over death. Explain to the children that because of a Jewish custom of neighbors and friends mourning with the family for several days after a death, many people were with Martha and Mary after Lazarus died and witnessed this great miracle that Jesus performed.
Discussion and Application Questions
Study the following questions and the scripture references as you prepare your lesson. Use the questions you feel will best help the children understand the scriptures and apply the principles in their lives. Reading the references with the children in class will help them gain insights into the scriptures.
- When Jesus received word that Lazarus was ill, how long did Jesus wait before he departed for Bethany? (John 11:6.) How long had Lazarus’s body lain in the tomb when Jesus arrived? (John 11:17.) Why do you think Jesus waited so long to go? (So everyone would know without question that Lazarus was dead, and raising him would be a stronger witness to Jesus’ divine power and mission [John 11:4, 15].)
- What did Martha and Mary say to Jesus when he arrived? (John 11:21–22, 32.) What did Martha think when Jesus told her that Lazarus would rise again? (John 11:23–24.) What was Martha’s testimony even before she saw her brother raised from the dead? (John 11:27.)
- Why did Jesus pray to Heavenly Father before he raised Lazarus? (John 11:41–42.) What did Jesus want the people to understand? (That he had been sent by Heavenly Father.)
- What did Jesus say to Lazarus? (John 11:43.) What happened? What was Lazarus clothed in? (John 11:44.)
- How do you think Mary, Martha, and the other people felt as they witnessed this miracle? How do you think you might have felt if you had been there? What did the people do after seeing the miracle? (John 11:45–46.) How would seeing Lazarus coming out of the tomb have affected your belief in Jesus?
- Why could Jesus raise Lazarus from the dead? How does it make you feel to know Jesus has the power to raise someone from the dead? How does this miracle help us know that Jesus is the Son of God? (John 11:4.)
- What did Jesus do later that proved his power over death? (He was resurrected. Help the children understand that when Lazarus came back from the dead, he was still mortal and would die again. When people are resurrected, they will never die again. They will live forever.)
- What did Jesus mean when he said he was “the resurrection and the life”? (John 11:25.) What does this mean to us?
Explain that Jesus not only has the power to bring someone back to mortal life, as he did Lazarus, he also has the more important power of raising everyone from the dead to immortality. Every person born on earth will be resurrected. Also, through his atonement Jesus has the power to give eternal life to those who obey and follow him. He is the source of resurrection and eternal life for each one of us.
Challenge the children to tell the story of Jesus raising Lazarus from the dead to someone else during the coming week.
Enrichment Activities
You may use one or more of the following activities any time during the lesson or as a review, summary, or challenge.
- Ask children to pretend to be Mary, Martha, Lazarus, and the Jews who were present when Jesus raised Lazarus from the dead. Ask another child to interview the people to find out what happened, what they witnessed, how they felt as they saw Lazarus come forth from the cave, and what they felt about Jesus.
- Prepare slips of paper that refer to events, such as the following, when someone witnessed that Jesus Christ is the Son of God. Prepare another set of papers with scriptures that describe the event: Event: Jesus was born. Scripture: An angel said, “Unto you is born this day in the city of David a Saviour, which is Christ the Lord” (Luke 2:11). Event: Jesus was baptized. Scripture: There was a voice from heaven saying, “Thou art my beloved Son”; the Spirit of God descended like a dove (Mark 1:9–11). Event: Jesus walked on the water. Scripture: Jesus’ disciples on the ship said, “Of a truth thou art the Son of God” (Matthew 14:25–27, 32–33). Event: Jesus healed a man born blind. Scripture: “And [the man] said, Lord, I believe [you are the Son of God]. And he worshipped him” (John 9:32, 35–38). Event: Peter testified of Christ. Scripture: When Jesus asked his disciples who they thought he was, Peter said, “Thou art the Christ, the Son of the living God” (Matthew 16:13–16). Event: Joseph Smith received his first vision. Scripture: Heavenly Father said, “This is My Beloved Son. Hear Him!” (Joseph Smith—History 1:17). Place the papers face down on the floor or table in random order. Have a child come up and turn two papers over and try to match the event with the appropriate scripture account. If the two papers do not go together, turn the papers back over and allow another child to take a turn. If all the papers are matched before each child has a turn, play the game again.
- Help the children memorize John 11:25.
Conclusion
Bear your testimony that Jesus Christ is the Son of God and has power over death. Express your love for the Savior and your gratitude to him for his atonement, which made it possible for us to be resurrected and gain eternal life.
Suggested Home Reading
Suggest that the children study John 11:39–46 at home as a review of this lesson.
Invite a child to give the closing prayer.
Lazarus Tutorial/ru
Lazarus — это бесплатный инструмент разработки с открытым исходным кодом для Free Pascal compiler, который, в свою очередь, также является бесплатным и с открытым исходным кодом. Интегрированная среда разработки Lazarus (IDE, см. Скриншоты)) — это среда программирования для создания автономных графических и консольных приложений.
В настоящее время Lazarus работает на Linux, macOS, FreeBSD и Windows и предоставляет настраиваемый редактор исходного кода и среду создания визуальных форм вместе с менеджером пакетов, отладчиком и полной интеграцией графического интерфейса с Free Pascal Compiler ,
Contents
- 1 Обзор
- 2 Начнем — Ваша первая Lazarus-программа!
- 2.1 Вторая попытка.
- 3.1 Главное меню
- 3.2 Кнопочная панель
- 5.1 Настройки
- 5.2 Кнопки
- 5.3 Трассировка
Обзор
Lazarus это бесплатный инструмент разработки с открытым кодом, предназначенный для также бесплатного компилятора с открытым кодом Free Pascal (object pascal). IDE Lazarus (screenshot) это стабильная богатая возможностями среда разработки для создания самостоятельных графических и консольных приложений. В настоящее время она работает на Linux, FreeBSD и Win32 и предоставляет настраиваемый редактор кода и визуальную среду создания форм вместе с менеджером пакетов, отладчиком и GUI полноcтью интегрированным с компилятором FreePascal.
Начнем — Ваша первая Lazarus-программа!
Найдите, установите(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: появится маленькая кнопка с троеточием (. ). Если вы ее нажмете, то автоматически перенесетесь в Редактор Кода и курсор окажется в участке кода, начинающегося с:
procedure TForm1.Button1Click(Sender: TObject); begin Button1.caption := 'Нажми еще раз'; end;
Нажмите F12 для переключения от Редактора Кода к окну формы Form1.
Теперь отредактируйте свойства кнопки2 (Button2): щелкните на Button2 для отображения ее свойств в Инспекторе Объектов. Измените свойство Caption на ‘Выход’ вместо ‘Button2’. Теперь перейдите на вкладку событий (Events) и щелкните в строке OnClick. Щелкните на кнопке с троеточием и перенеситесь в Редактор Кода, в тело другой процедуры:
procedure TForm1.Button2Click(Sender: TObject); begin Close; end;
Теперь нажмите F12 чтобы увидеть форму Form1 вновь. Теперь вы можете попытаться скомпилировать. Простейшим способом сделать это является выбор в главном меню пункта ‘Run’ а в появившемся подменю пункта ‘Run’. Вы также можете просто нажать клавишу F9. Сначала произойдет компиляция, а затем (если все в порядке) линковка и запуск вашей программы.
Промелькнет несколько текстовых окон и будут выведены различные сообщения компилятора, а потом вновь появится окно формы Form1, но уже без точечной сетки; это и есть реальное главное окно вашего приложения, и оно ожидает нажатия кнопок или любого другого вашего действия.
Попробуйте щелкнуть на кнопке ‘Нажми меня’. Вы увидите, что надпись на ней сменится на ‘Нажми еще раз’. Если вы нажмете еще раз, то на кнопке так и останется надпись ‘Нажми еще раз’!!
Теперь щелкните на кнопке с надписью ‘Выход’. Окно закроется и программа завершится. Вновь появится окно формы Form1 с точечной сеткой, готовое для редактирования.
Теперь (и вообще почаще) вы можете сохранить свою работу выбрав последовательно пункты меню Project > Save Project As > имя_вашего_файла.pas
Вторая попытка.
Вновь откройте сохраненный вами проект.
На форме Form1 щелкните на кнопке ‘Нажми меня’ (Button1) чтобы выбрать ее. В Инспекторе Объектов перейдите на вкладку событий (Events), щелкните на строке справа от события OnClick, щелкните на кнопке с многоточием, чтобы перенестись к соответствующему участку кода в Редакторе.
Измените код, на приведенный ниже:
procedure TForm1.Button1Click(Sender: TObject); begin if Button1.tag =0 then begin Button1.caption := 'Нажми еще раз'; Button1.tag := 1 end else begin Button1.caption := 'Нажми меня'; Button1.tag := 0 end end;
Сохраните проект, перекомпилируйте и запустите. Левая кнопка теперь циклически меняет свой текст с одного сообщения на другое.
Сделай дело — гуляй смело!
Если вы хотите писать консольные или программы с текстовым интерфейсом на Pascal (например, если вы следуете стандартному курсу изучения программирования на Pascal, или вам нужно написать программу для работы в командном режиме или системную программу) вы также можете использовать Lazarus для написания, компилирования и выполнения ваших программ. Это прекрасная среда для программирования на Pascal. Смотри Console Mode Pascal.
Редактор
Когда вы запускаете Lazarus в первый раз, на вашем рабочем столе появляется набор несвязанных ‘плавающих’ окошек.
Первое, расположенное в самом верху рабочего стола имеет название Lazarus Editor vXXXXXX — project1 (название зависит от используемой версии и названия открытого проекта). Это главное окно управления проектом и оно содержит Главное Меню и Палитру Компонентов (Component Palette).
Строкой ниже располагается Главное Меню с обычными пунктами File, Edit, Search, View и некоторыми специфичными для Lazarus. Ниже Слева располагается набор кнопок, предоставляющих быстрый доступ к некоторым функциям главного меню, и справа — Палитра Компонентов. (Примечание переводчика: если при установке вы выбираете русский язык, то весь интерфейс будет на русском, то есть пункты меню, названия окон и вкладок, а также подсказки. В связи с этим далее все названия указаны на русском, а в скобках (на английском) языке. В любой момент можно переключить язык интерфеса в пункте меню Окружение. )
Под окном редактора Lazarus слева располагается окно Инспектора Объектов, а справа Редактор Исходного Кода (Lazarus Source Editor). Может быть и другое окно меньшего размера, озаглавленное Form1, расположенное поверх Редактора Исходного Кода. Если его в данный момент не видно, то можно переключиться к нему, нажав клавишу F12, которая позволяет переключаться между Редактором Исходного Кода и Окном Формы. Окно формы это то место, где вы разрабатываете графический интерфейс вашей программы, а в Редакторе Исходного Кода отображается разрабатываемый вами Pascal-код вашего приложения. Использование Инспектора Объектов детально обсуждается ниже после описания Палитры Компонентов.
Когда вы начинаете новый проект (или впервые запускаете Lazarus) по умолчанию создается стандартная форма, состоящая из прямоугольника с точечной сеткой для более легкого позиционирования различных компонентов на форме и системная строка сверху, которая обычно содержит кнопки Свернуть, Развернуть и Закрыть. Если вы щелкните мышкой в любом месте формы, вы увидите ее свойства в Инспекторе Объектов у левого края экрана.
Другие окна, которые могут появиться в процессе работы: Инспектор проектов, содержащий сведения о файлах, включенных в проект, и позволяющий вам добавлять и удалять файлы из проекта; Окно Messages (Сообщения), отображающее сообщения компилятора, ошибки и отчеты по вашему проекту; если Lazarus был запущен из терминала, то это окно остается запущенным и в нем отображаются подробные сообщения компилятора.
Главное меню
For a detailed description of every menu item which is accessible from the Lazarus IDE Main Menu, please refer to the Main menu/ru page.
Кнопочная панель
Маленькая панель в левой верхней части основного окна, слева от палитры компонентов, имеет набор кнопок, повторяющих наиболее часто применяемые выборы основного меню:
Создать модуль, Открыть (со стрелкой вниз для отображения списка недавно использованных файлов), Сохранить, Сохранить все, Создать форму, Переключить Форма/Модуль (т.е. показать либо форму, либо модуль исходного кода), Показать модули, Показать формы, Запуск (т.е. компиляция и выполнение), Пауза, Шаг со входом, Шаг в обход (последние два – функции отладчика).
Палитра Компонентов
Это панель инструментов с вкладками, показывающая множество иконок, представляющих обычно применяемые компоненты при построении форм.
Каждая вкладка представляет собой набор иконок, составляющих функциональную группу компонентов. Самая левая иконка на каждой вкладке в виде стрелочки называется Средством Выбора.
Если навести курсор мыши на иконку палитры компонентов без нажатия, появится название данной компоненты. Заметьте, что каждое название начинается с ‘T’, что означает ‘Тип’, а точнее ‘Класс’ компоненты. При выборе компоненты для размещения на форме, Class добавится в секцию type раздела interface модуля (обычно в виде части на TForm1), и instance (образец) этого класса добавится в секцию var (обычно как переменная Form1). Все Methods (методы), разработанные для формы или ее компонент (процедуры или функции) будут помещены в раздел implementation модуля.
В приведенном ниже списке компонентов можно найти связи с файлами, которые содержат описания модулей, в которых они найдены. Если нужно узнать о свойствах конкретного компонента, зачастую следует обратить внимание на Наследование этого компонента и просмотреть свойства базового типа, из которого он произведен. Например, для изучения TMaskEdit очень полезно просмотреть TCustomMaskEdit.
ВКЛАДКИ (их имена понятны и не требуют разъяснений):
- Standard
Наиболее часто применяемые компоненты:TMainMenu, TPopupMenu, TButton, TLabel, TEdit, TMemo, TToggleBox, TCheckBox, TRadioButton, TListBox, TComboBox, TScrollBar, TGroupBox, TStaticText, TRadioGroup, TCheckGroup, TPanel, TActionList - Additional
Дополнительные, часто используемые:TBitBtn, TSpeedButton, TImage, TShape, TBevel, TPaintBox, TNotebook, TLabeledEdit, TSplitter, TMaskEdit, TCheckListBox, TScrollBox, TApplicationProperties, TStringGrid, TDrawGrid, TPairSplitter - Common Controls
TTrackBar, TProgressBar, TTreeView, TListView, TStatusBar, TToolBar, TUpDown, TPageControl, TImageList - Dialogs
TOpenDialog, TSaveDialog, TSelectDirectoryDialog, TColorDialog, TFontDialog, TOpenPictureDialog, TSavePictureDialog, TCalendarDialog, TCalculatorDialogНекоторые полезные процедуры или функции группы Dialog не размещены на Палитре, но легко применяются путем прямого вызова из исходной программы.
Несколько хороших примеров использования компонентов находятся в папке $LazarusPath/lazarus/examples исходной установки. Многие программы показывают способы применения диалогов и других компонентов без использования IDE и палитры компонентов, при наличии файла определения отдельной формы: все компоненты явно и полно определены в основной программе. Другие программы примеров полностью используют IDE.
Некоторые примеры не будут сначала работоспособны: понадобится настройка путей и разрешений для файлов и папок. При желании скомпилировать пример убедитесь, что для файлов и папок установлены разрешения read/write/execute, или скопируйте файлы в папку с подходящими разрешениями.
Попробуйте выполнить программу ‘testall’ для просмотра меню доступных компонентов совместно с маленькими примерами тестовых форм для большинства из них; затем просмотрите исходный код для понимания принципов их работы!
- Misc
TColorButton, TSpinEdit, TArrow, TCalendar, TEditButton, TFileNameEdit, TDirectoryEdit, TDateEdit, TCalcEdit, TFileListBox - Data Controls
Компоненты работы с данными, которые в основном копируют стандартную и дополнительную группы, но применительно к базам данных: TDBNavigation, TDBText, TDBEdit, TDBMemo, TDBImage, TDBListBox,TDBComboBox, TDBCheckBox, TDBRadioGroup, TDBCalendar, TDBGroupBox, TdbGrid - Data Access
TDatasource - System
TTimer, TIdleTimer, TProcess - SynEdit
Группа компонентов для сопряжения с другими языками и сервисными программами. SynEdit – продвинутый редактор для Borland Delphi, Kylix and C++Builder. Он поддерживает подцветку синтаксиса и завершение кода, экспорт в html, tex и rtf. Полное управление VCL/CLX, считая, что это не оболочка для управления Microsoft Windows, не нужна библиотека времени выполнения; это делает SynEdit кроссплатформенным компонентом. Также планируется совместимость с FreePascal, и SynEdit является компонентом редактирования в Lazarus IDE. См. synedit at sourceforge. TSynEdit, TSynAutoComplete, TSynExporterHTML, TSynMacroRecorder, TSynMemo, TSynPasSyn, TSynCppSyn, TSynJavaSyn, TSynPerlSyn, TSynHTMLSyn, TSynXMLSyn, TSynLFMSyn, TSynUNIXShellScriptSyn, TSynCssSyn, TSynPHPSyn, TSynTeXSyn, TSynSQLSyn, TSynMultiSynДля работы с палитрой нужно открыть форму (если форма не открыта, выбрать Файл -> Создать Форму). Щелкните на иконке нужного компонента на нужной вкладке Палитры, затем щелкните на форме, и этот компонент появится на ней. После этого можно выбрать новый компонент щелчком мыши, переместить его в желаемое место и подогнать размеры. Эти установки можно сделать также с помощью Инспектора Объектов, регулируя значения соответствующих свойств данного компонента.
При установке дополнительных компонентов, разработанных самостоятельно, или полученных со стороны, появятся дополнительные вкладки с соответствующими иконками на Палитре компонентов. Эти новые компоненты могут быть выбраны и использованы на формах, как и те, что поставлены по умолчанию.
Отладчик
Писал и редактировал: Romlo
Настройки
Чтобы пользоваться отладчиком, должны быть установлены галочки:
проект > параметры компилятора > вкладка «Связывание» >
- галочка «Выдавать номера строк в ошибках времени исполнения»
- галочка «Генерировать отладочную информацию для GDB (замедляет сборку)»
Кнопки
Управление отладкой производится вот этими пятью кнопками:
- Зеленый треугольник — «Запуск» — скомпилировать и запустить приложение под отладчиком.
- Вертикальные палочки — «Пауза» — здесь серые, а вообще синие — это пауза, можно приостановить приложение, например, при трассировке.
- Квадратик — «Останов» — здесь серый, а вообще красный — закрыть приложение. Это если оно повисло (напр. в бесконечном цикле).
Остальные две кнопки используются при трассировке программы, про которую мы поговорим подробнее.
Трассировка
Трассировать программу — значит выполнять её шаг за шагом, построчно. Для трассировки какого-либо участка программы, нужно установить в нужном месте «точку останова». Для этого надо найти начало участка программы в редакторе кода, а затем щёлкнуть по его номеру слева. При этом сама строчка выделится красным, а рядом с номером появится красный кружок.
После нажатия на «запуск», знак вопроса в кружке должен смениться галочкой. Если вместо галочки там крестик, значит, точка останова не была установлена по каким-то причинам. В этом случае лучше ещё раз проверить настройки и перезапустить Lazarus. Если же всё получилось, продолжим. Далее, нужно вызвать то событие, при котором начнёт выполняться данный участок кода (то есть если вы поставили точку останова в начале button1_click, например, то теперь вам надо нажать эту кнопку). При этом должен показаться редактор кода. Ранее красная строчка теперь станет серой, а галочка в кружке сменится стрелочкой:
Вот теперь и вспомним про те две кнопки, что мы не рассмотрели. первая называется «Шаг со входом», вторая — «Шаг в обход». Смысл первой заключается в том, что если сейчас вы «стоите» на строчке с какой-то процедурой или функцией, то нажав эту кнопку, вы перейдете на эту процедуру и будете выполнять пошагово уже её. Когда она закончится, вы вернётесь обратно, но уже на следующую строку. Как несложно догадаться, нажав на вторую кнопку, вы не зайдёте в процедуру, она просто выполнится, а вы перейдёте на следующую строку.
Отдельно надо сказать, что «Шаг со входом» не работает, если функция, на которой вы «стоите», экспортирована из библиотеки (например, в WinAPI-функцию вы зайти не сможете).
Также имеется возможность просматривать содержимое переменных, для этого надо просто навести на неё мышку прямо в редакторе кода, во всплывающей подсказке будет указан адрес переменной и её содержимое:
Ну и в дополнение к сказанному добавлю, что чтобы продолжить выполнение программы в обычном режиме (если вам надоело её трассировать), достаточно нажать кнопку «запуск». Ну а чтобы убрать точку останова, надо закрыть приложение и ещё раз щёлкнуть по номеру строки, на которой эта точка стоит. ну и после этого заново откомпилировать приложение.
Файлы Lazarus
(Благодарим Kevin Whitefoot.) (ДОбавления от Giuseppe Ridinò, User:Kirkpatc и Tom Lisjac)
Когда вы выполняете сохранение на самом деле вы сохраняете два файла:
xxx.pas и yyy.lpr
(Вы сохраняете и больше, но это те файлы, которым вы даете имена). Файл проекта (lpr) и файл модуля (pas) должны иметь разные имена, потому что Lazarus присваивает имя модулю (в исходном коде) также, как и имя файла модуля, а программе по имени файла проекта (это необходимо сделать иначе компилятор может впоследствии не найти модуль по ссылке на него в файле проекта). Во избежание противоречий (ошибок) следует изменить все упоминания Unit1 на xxx.
Итак, если вы сохранили проект под именем again, то попытка сохранить again.pas и again.lpr приведет к ошибке, потому что имена модуля и программы одинаковы, что приводит к ошибке двойного именования.
Ниже приведен пример именования:
total 4740 free 76500 -rwxrwxrwx 1 kjwh root 4618697 Mar 24 11:19 again.exe -rw-rw-rw- 1 kjwh root 3002 Mar 24 11:21 again.lpi -rw-rw-rw- 1 kjwh root 190 Mar 24 11:18 again.lpr -rw-rw-rw- 1 kjwh root 506 Mar 24 11:08 againu.lfm -rw-rw-rw- 1 kjwh root 679 Mar 24 11:08 againu.lrs -rw-rw-rw- 1 kjwh root 677 Mar 24 11:08 againu.pas -rw-rw-rw- 1 kjwh root 2124 Mar 24 11:08 againu.ppu -rwxrwxrwx 1 kjwh root 335 Mar 24 11:07 ppas.bat
Заметьте, что появилось более двух файлов, как следовало бы ожидать.
Ниже приведена краткая справка по каждому файлу:
again.exe: Основной исполняемый файл программы. Win32 добавляет расширение «exe». Linux этого не делает. В Linux это файл будет иметь большой размер вследствие того, что включает отладочную информацию. Запустите утилиту «strip» чтобы удалить ее и значительно снизить размер исполняемого файла.
again.lpi: Это основной файл проекта Lazarus (Lazarus Project Information); эквивалент основного файла приложения в Delphi с расширением .dpr. Он сохраняется в XML формате.
again.lpr: Исходный код основной программы. Не смотря на специфичноое для Lazarus расширение на самом деле это обычный Pascal-код. Он содержит строку Uses, помогающую компилятору найти все необходимые модули Отметим, что программа называется не аналогично имени данного файла.
againu.lfm: Это файл, в котором Lazarus хранит описание формы. Lazarus использует его для создания файла ресурсов, который включает секцию инициализации модуля againu.pas. Файл Delphi с расширением .dfm может быть преобразован в lfm-формат в IDE Lazarus из главного меню: Tools->Convert DFM file.
again.lrs: Это автоматически генерируемый файл ресурсов. Заметьте, что это не файл ресурсов Windows.
againu.pas: Модуль, содержащий код формы.
again.ppu: Это скомпилированный модуль.
ppas.bat: Это простой скрипт, связывающий программу для создания выполняемого файла. Если компиляция успешна, он удаляется компилятором.
Авторство и изменения
Эта страница была импортирована из epikwiki версии.
- Created initial page and template. T. Lisjac — 11/04/2003 VlxAdmin
- Inserted a note containing instructions for writing your first Lazarus Program. Suggest an administrator places it in the appropriate place on the Tutorial menu. 3/09/2004 User:Kirkpatc
- Per above, moved Chris’s writeup to the main body of the tutorial VlxAdmin
- Began to insert text describing the Lazarus Editor — more to follow! 24 Mar 2004 User:Kirkpatc
- Added some more to Lazarus Editor section of Tutorial. 25 Mar 2004 User:Kirkpatc
- Added screenshots and revised some of the page formatting VlxAdmin 3/25/2004
- Moved some of kwhitefoot’s comments into Tutorial section. Formatting not quite right, but have to go to bed now! 26 Mar 2004 User:Kirkpatc
- Formatted, added credits and comments. Removed original notes. VlxAdmin 3/26/2004
- More material added to Editor section of tutorial. 26 Mar 2004 User:Kirkpatc
- More material added describing the Main Menu. Renamed ‘Hello World’ to ‘Getting Started’ and moved it to nearer the top. 31 March 2004 User:Kirkpatc
- Inserted section on Run sub-menu. Some general editing (eg ended each entry with a period to ensure consistency). 9 Apr 2004 User:Kirkpatc
- Inserted a new section on How to get started with MySQL in FPC/Lazarus. 13 Apr 2004 User:Kirkpatc
- Deleted the section on MySQL from here: it has been copied to Lazarus Database section of tutorial. 14 Apr 2004 User:Kirkpatc
- Added some more to the description of the Editor Main Menu. 18 Apr 2004 User:Kirkpatc
- Added section on Environment sub-menu. 19 Apr 2004 User:Kirkpatc
- Added section on Components sub-menu. 4 May 2004 User:Kirkpatc
- Adding Tools sub-menu description (incomplete). 7 May 2004 User:Kirkpatc
- Added some screenshots to Menu descriptions. 9 May 2004 User:Kirkpatc
- Fixed a bit in Environment Options — thanks VincentSnijders. 14 May 2004 User:Kirkpatc
- More additions to Tools sub-menu. 19 May 2004 User:Kirkpatc
- Added a section on the Button Bar and started work on The Component Palette. 20 May 2004 User:Kirkpatc
- Posted a description file for the StdCtrls unit of the LCL, in the hope that people will add comments. 26 May 2004 User:Kirkpatc
- Edited the StdCtrls file, removing a lot of repetitive material and doing some formatting. It is still far too long. 28 May 2004 User:Kirkpatc
- Expanding on the Components Palette. 5 June 2004 User:Kirkpatc
- Added a lot to the DialogExamples page. 10 June 2004 User:Kirkpatc
- Considerable revision of the StdCtrls page, hopefully making it clearer and encouraging people to contribute — particularly in the ‘Description’ sections. 14 June 2004 User:Kirkpatc
- Added pages for Menus and Dialogs units (linked to Component Palette description) — please feel free to add to these pages. 14 June 2004 User:Kirkpatc
- Added page for Common Controls (linked to Component Palette). 16 June 2004 User:Kirkpatc
- Added MaskEdit page (linked to Component Palette). 17 June 2004 User:Kirkpatc
- Added Buttons, ExtCtrls pages (linked to Component Palette). 17 June 2004 User:Kirkpatc
- Edited MainMenu component description page. 23 June 2004 User:Kirkpatc
- Some additions to Common Controls. 28 June 2004 User:Kirkpatc
- A new tutorial on Text-mode Pascal programming has been added. 5 July 2004 User:Kirkpatc
- Minor changes to ComCtrls, ExtCtrls, Environment Menu. 10 July User:Kirkpatc
- Added FormsTxt, component description page for Component Palette. 20 July 2004 User:Kirkpatc
- Some corrections to ConsoleModePascal. 21 July 2004 User:Kirkpatc
- Some small changes to ComponentPalette. 22 July 2004 User:Kirkpatc
TAChart Tutorial: BarSeries/ru
Библиотека TAChart различные диаграммы в Lazarus. Но в отличии от других типов рядов, гистограммы (столбчатые диаграммы) кажутся более сложными, главным образом потому, что существует широкий спектр возможностей:
- смежные столбцы
- сложенные столбцы
- сложенные столбцы, приведенных к 100%
- вертикальные столбцы
- горизонтальные столбцы
В этом руководстве мы хотим показать вам принципы того, как создать диаграмму с несколькими рядами столбцов, расположенными смежно. follow-up tutorial научит вас, как сложить столбцы друг над другом.
Помимо гистограмм в этом руководстве будет представлен TRandomChartSource , который является стандартным инструментом для разработки диаграммы без необходимости компиляции приложения.
Вам понадобятся некоторые базовые знания в Pascal и в Lazarus. Взгляните на TAChart Tutorial: Getting started, чтобы изучить некоторые базовые навыки работы с TAChart , если эта библиотека новая для Вас. Мы также рекомендуем TAChart documentation.
Подготовка
Настройка диаграммы
Создайте новый проект, сохраните его.
Добавьте компонент TChart из палитры компонентов Lazarus на Form1 , смасштабируйте его, чтобы заполнить заданную область формы.
Данные для вывода
Прежде чем продолжить, давайте подумаем о том, какие данные мы хотим вывести. Возможно, вы могли бы использовать баланс своих чековых и сберегательных счетов, или бизнес-отчеты крупных компаний, найденные где-нибудь в Интернете, или что-то совершенно другое.
Давайте на этот раз пойдем другим путем: почему бы нам не построить график только случайных данных? Конечно, они ничего не значат, но они просты и очень удобны для того, чтобы потренироваться с компонентом. В частности, TAChart содержит компонент TRandomChartSource который предоставляет случайные данные, подключающиеся к диаграммам прямо во время разработки. Это означает, что вы можете следовать этому руководству без необходимости написания хотя бы одной строчки кода и без необходимости компилировать демонстрационное приложение. Позже, когда работа над макетом будет завершена, вы можете удалить источники случайных диаграмм и заменить их источниками диаграмм, содержащими наши данные.
Как вы вскоре увидите, на графике будет три ряда, каждый из которых, к примеру, с четырьмя столбцами. Для каждой серии вам понадобится RandomChartSource . Чтобы добавить RandomChartSource вгляните на палитру компонентов «Диаграммы» — это третий значок на палитре, подсвеченный красным на скриншоте ниже:
Добавьте в форму три источника случайных диаграмм — по одному на серию. Переименуйте в RedChartSource , BlueChartSource и YellowChartSource таким образом, что они будут связаны с красным «red», синим «blue» и желтым «yellow» сериями диаграмм, которые сразу будут созданы (Вы всегда должны использовать «говорящие» названия для переменных.)
Прежде чем сделать это, нам нужно настроить источники случайных диаграмм, потому что по умолчанию они не предоставлят никаких данных. Мы хотим, чтобы в каждой серии было по четыре диаграммы. Поэтому установите свойство PointsNumber в значение 4. Чтобы метки осей синхронизировались со столбцами, ось x должна находиться в диапазоне от 1 до 4 ( или от 0 до 3, или от 0 до 39, как Вам угодно — мы обсудим метки осей более подробно позже): XMin = 1, XMax = 4 . И, наконец, мы также должны указать диапазон осей y , можно выбрать YMin = 0 и YMax = 100 .
Ряды столбцов
Добавление рядов
Теперь, когда все приготовления закончены, мы можем добавить ряд столбцов на диаграмму. Дважды щелкните по диаграмме, чтобы открыть редактор рядов (series). Нажмите «Добавить» и выберите «Ряд столбцов» из списка. Повторите дважды. В конце концов, у нас есть три ряда столбцов на графике. Мы не видим их на диаграмме, так как они еще не связаны с нашими данными. Однако в дереве объектов Инспектора объектов ряды отображаются как дочерние элементы узла диаграммы.
Щелкните на первом ряду в дереве объектов и — в Инспекторе объектов — перейдите к свойству Source и выберите RedChartSource из списка. Теперь ряды становятся видимыми на диаграмме. Для того, чтобы сделать его красным «red» перейдите к его свойству SeriesColor и выберите цвет clRed . Переименуйте ряд в «RedBarSeries», и измените заголовок (title) на «красный». Последнее предназначено для легенды, которую мы включаем, устанавливая Legend.Visible в true .
Повторите все это с двумя другими рядами аналогично.
Теперь на графике отображается ряд столбцов (гистограмма). Однако столбики расположены на одном и том же значении оси X , желтые столбики частично закрыты другими столбиками. Давайте исправим это.
Side-by-side arrangement of bars
In oder to arrange the bars of each group (i.e. bars corresponding to the same x value) side-by-side, we have to shift them horizontally. TBarSeries offers two properties for this purpose:
- BarWidthPercent
- BarOffsetPercent
Both numbers are expressed as a percentage of the distance to the next bar group. (In some charts, the bars are not equidistant and therefore get varying bar widths. To achieve a constant bar thickness in such a case, set the property BarWidthStyle to bwPercentMin .)
The basic idea is that the space between the bar groups (100%) is divided by the bars and some empty space to the next group. If we want to leave a gap of — say — one bar width between the groups, we have to divide 100% by 4 (3 bars plus gap), i.e. each bar can occupy a width of 25%.
So, let’s set the BarWidthPercent to 25% and see what happens. Oh — not quite what we wanted: The bars did get narrower, but they are still overlapping. Of course, this happens because we did not change the BarOffsetPercent parameter.
Currently, BarOffsetPercent is zero which means that the center of each bar is exactly at the position of the axis tick mark. We have to shift the red bars to the left and the yellow bars to the right such that they touch the blue bars which remain in the center. The shift difference is one bar width, i.e. 25%. For moving the red bars to the left their BarOffsetPercent has to be negative.
In summary, we use the following values:
- RedBarSeries: BarOffsetPercent = -25, BarWidthPercent = 25
- BlueBarSeries: BarOffsetPercent = 0, BarWidthPercent = 25
- YellowBarSeries: BarOffsetPercent = 25, BarWidthPercent = 25
Axis
Using text labels
The next issue to be addressed is the x axis. Usually bar charts are considered to display categories of some data sets which often requires text labels underneath each bar group. But so far, we only have numerical labels, and the intermediate labels at half integers are particularly annoying.
The best way to get this right is to use an additional ChartSource for assigning the strings to the axis values, it is a TListChartSource this time to be found as the second icon in the chart component palette (immediately to the left of the TRandomChartSource .) Add it to the form and rename is as LabelsChartSource .
The ListChartSource has a built-in data editor which allows to enter data at design-time. Select the LabelsChartSource and go to the property DataPoints . Click on «. » at the right to open the data points editor, and enter the following data:
In the «X» column we enter the values of the x coordinates of each bar group. We could omit the «Y» column, but as we’ll see later that it is conventient to have the same data in this column as well because labels are retained after rotation of the bars to an horizontal arrangement. In the column «Text» we specify the texts that will appear for each bar group along the axis as axis marks. Let us assume that our data represent some seasonal values and use the abbreviations «Q1», «Q2», «Q3», and «Q4» for «quarter 1» etc. Column «Color» can be left empty.
In order to activate these labels we have to assign this ChartSource to the Source property of the Marks of the bottom axis, and we have to set the property Style of the Marks to smsLabel .
Voila — here’s what we get:
Showing grid lines & ticks between groups
A minor issue can be improved: the chart would be clearer if the axis tick marks and grid lines were not at the center of the bar groups, but right between them.
At first, we turn off the grid of the bottom axis: BottomAxis.Grid.Visible = false . To remove the ticks, we can set the TickLength and the TickInnerLength to 0 .
But how to add grid lines between the chart groups? This can be done by creating a «minor» axis to the bottom axis. This is another set of ticks and gridlines in addition to the «major» axis. Go to the bottom axis and click on Minors to open the corresponding editor. Click «Add» and the select the 0 — M in the list. Back in the normal Object Inspector, activate Visible , increase the TickLength to 4, and finally, set Intervals.Count to 1 — we only want one minor tick between the major ticks. Check the Grid settings — Visible should be true .
This leads to the final result. Final? Not quite! There is an annoying little gap underneath the bars. This originates from the chart’s Margins property which leaves some distance between the series and the axes. Just set Chart.Margins.Bottom to 0 to remove the gap.
Horizontal bar series
Before closing this lesson we’d like to quickly modify this project and create a plot with horizontal bars. This kind of diagram is often preferred when the axis labels consist of lengthy texts, and the chart is in a landscape orientation.
TAChart does not offer a dedicated » THorizontalBarSeries «, but the standard TBarSeries can easily be modified to obtain horizontal bars. Like any other descendant of TChartSeries it has properties AxisIndexX and AxisIndexY to indicate which axis is responsible for x and y coordinates. Just set AxisIndexX to the index of the LeftAxis (usually 0 ) and AxisIndexY to that of the BottomAxis in order to rotate the bar direction.
And, of course, the LabelsChartSource has to be linked to the Marks.Source of the LeftAxis this time. And the minor axis has to be handled accordingly.
Essentially, that’s all that’s needed to create a chart with horizontal bars.
Summary
Steps to create a side-by-side bar chart:
- Every bar requires a separate BarSeries.
- Use the BarSeries’ properties BarWidthPercent and BarOffsetPercent to arrange the bars side-by-side with or without overlapping. The percentages refer to the distance between the center of the bar groups.
- For horizontal bar series, set the series’ AxisIndexX to the index of the chart’s LeftAxis (usually 0 ) and AxisIndexY to the index of the BottomAxis (usually 1 ).
Source code
The source code of this tutorial is available in the folder components/tachart/tutorials/bar_series of your TAChart installation of newer Lazarus versions.
Project file
program project1; uses cthreads, Interfaces, // this includes the LCL widgetset Forms, tachartlazaruspkg, Unit1 ; begin RequireDerivedFormResource := True; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
Unit1.pas
unit Unit1; interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, TAGraph, TASeries, TASources; type TForm1 = class(TForm) Chart1: TChart; LabelsChartSource: TListChartSource; RedBarSeries: TBarSeries; BlueBarSeries: TBarSeries; YellowBarSeries: TBarSeries; RedChartSource: TRandomChartSource; BlueChartSource: TRandomChartSource; YellowChartSource: TRandomChartSource; private public end; var Form1: TForm1; implementation end.
Unit1.lfm (vertical bars)
object Form1: TForm1 Left = 381 Height = 272 Top = 444 Width = 429 Caption = 'Form1' ClientHeight = 272 ClientWidth = 429 LCLVersion = '1.3' object Chart1: TChart Left = 0 Height = 272 Top = 0 Width = 384 AxisList = item Minors = <> Title.LabelFont.Orientation = 900 end item Grid.Visible = False TickLength = 0 Alignment = calBottom Marks.Format = '%2:s' Marks.Source = LabelsChartSource Marks.Style = smsLabel Minors = item Intervals.Count = 1 Intervals.MinLength = 5 Intervals.Options = [aipUseCount, aipUseMinLength] TickLength = 4 end> end> Foot.Brush.Color = clBtnFace Foot.Font.Color = clBlue Legend.Visible = True Margins.Bottom = 0 Title.Brush.Color = clBtnFace Title.Font.Color = clBlue Title.Text.Strings = ( 'TAChart' ) ParentColor = False object RedBarSeries: TBarSeries Title = 'red' BarBrush.Color = clRed BarOffsetPercent = -25 BarWidthPercent = 25 Source = RedChartSource end object BlueBarSeries: TBarSeries Title = 'blue' BarBrush.Color = clBlue BarWidthPercent = 25 Source = BlueChartSource end object YellowBarSeries: TBarSeries Title = 'yellow' BarBrush.Color = clYellow BarOffsetPercent = 25 BarWidthPercent = 25 Source = YellowChartSource end end object RedChartSource: TRandomChartSource PointsNumber = 4 RandSeed = 1 XMax = 4 XMin = 1 YMax = 100 YMin = 0 left = 360 top = 72 end object BlueChartSource: TRandomChartSource PointsNumber = 4 RandSeed = 2 XMax = 4 XMin = 1 YMax = 100 YMin = 0 left = 360 top = 120 end object YellowChartSource: TRandomChartSource PointsNumber = 4 RandSeed = 3 XMax = 4 XMin = 1 YMax = 100 YMin = 0 left = 360 top = 168 end object LabelsChartSource: TListChartSource DataPoints.Strings = ( '1|1|?|Q1' '2|2|?|Q2' '3|3|?|Q3' '4|4|?|Q4' ) left = 361 top = 220 end end
Unit1.lfm (horizontal bars)
object Form1: TForm1 Left = 381 Height = 272 Top = 444 Width = 429 Caption = 'Form1' ClientHeight = 272 ClientWidth = 429 LCLVersion = '1.3' object Chart1: TChart Left = 0 Height = 272 Top = 0 Width = 384 AxisList = item Grid.Visible = False TickLength = 0 Marks.Format = '%2:s' Marks.Source = LabelsChartSource Marks.Style = smsLabel Minors = item Intervals.Count = 1 Intervals.MinLength = 5 Intervals.Options = [aipUseCount, aipUseMinLength] TickLength = 4 end> Title.LabelFont.Orientation = 900 end item Alignment = calBottom Minors = <> end> Foot.Brush.Color = clBtnFace Foot.Font.Color = clBlue Legend.Visible = True Margins.Bottom = 0 Title.Brush.Color = clBtnFace Title.Font.Color = clBlue Title.Text.Strings = ( 'TAChart' ) ParentColor = False object RedBarSeries: TBarSeries Title = 'red' AxisIndexX = 0 AxisIndexY = 1 BarBrush.Color = clRed BarOffsetPercent = -25 BarWidthPercent = 25 Source = RedChartSource end object BlueBarSeries: TBarSeries Title = 'blue' AxisIndexX = 0 AxisIndexY = 1 BarBrush.Color = clBlue BarWidthPercent = 25 Source = BlueChartSource end object YellowBarSeries: TBarSeries Title = 'yellow' AxisIndexX = 0 AxisIndexY = 1 BarBrush.Color = clYellow BarOffsetPercent = 25 BarWidthPercent = 25 Source = YellowChartSource end end object RedChartSource: TRandomChartSource PointsNumber = 4 RandSeed = 1 XMax = 4 XMin = 1 YMax = 100 YMin = 0 left = 360 top = 72 end object BlueChartSource: TRandomChartSource PointsNumber = 4 RandSeed = 2 XMax = 4 XMin = 1 YMax = 100 YMin = 0 left = 360 top = 120 end object YellowChartSource: TRandomChartSource PointsNumber = 4 RandSeed = 3 XMax = 4 XMin = 1 YMax = 100 YMin = 0 left = 360 top = 168 end object LabelsChartSource: TListChartSource DataPoints.Strings = ( '1|1|?|Q1' '2|2|?|Q2' '3|3|?|Q3' '4|4|?|Q4' ) left = 361 top = 220 end end