Земля и луна, звёзды, Сириус
بسم الله الرحمن الرحيم

IDE Lazarus и Free Pascal

Знакомство и опыт работы

О проекте Lazarus

В самой системе Lazarus в верхнем меню в справке о проекте написано следующее:

Лицензия: GPL/LGPL. Обратитесь к исходному коду Lazarus и Free Pascal за подробностями.
Lazarus - это IDE для создания графических и консольных приложений при помощи компилятора Free Pascal. Free Pascal - это компилятор языков Pascal и Object Pascal, работающий под Windows, Linux, Mac OS X, FreeBSD, и другими ОС.
Lazarus - это недостающий элемент, который позволит вам разрабатывать программы для всех вышеперечисленных платформ в Delphi-подобном окружении. Эта IDE является инструментом RAD, включающим в себя дизайнер форм.
Так как проект Lazarus растёт, он нуждается в большем количестве разработчиков.

Работа со свойствами в Lazarus

Всплывающая подсказка у кнопки

При работе со средой Lazarus возникло некоторе затруднение. А именно: была предпринята попытка добавить всплывающую подсказку к кнопке, и было найдено соответствующее свойство кнопки под названием Hint, но при исполнении программы подсказка не появлялась, тогда я обратился к справочной и учебной литературе, начав с меньшей по размеру русскоязычной. В книге под названием Экспресс курс программирования в Lazarus, автор: Е.А.Попов, я обнаружил на тридцать шестой странице из всего сорака пяти страниц в главе четвёртой с названием "Основные элементы интерфейса" в разделе "Кнопка", в таблице "Свойства" свойство ShowHint которое обозначало само наличие всплывающей подсказки, то есть оказалось, что необходимо было не только задать значение самой всплывающей подсказки, но и задать её наличие, то есть утвердить её существование. Это был моя первая практическая проблема успешно решённая для среды разработки Lazarus, которая предназначена для создания программ с графическим интерфейсом и основана на компиляторе Free Pascal.

Таблица свойств кнопки в Инспекторе объектов IDE Lazarus, напротив свойства ShowHint установлено значение True.

Теперь я умею добавлять всплывающую подсказку для визуальных объектов в этой IDE Lazarus и это сделать очень легко. Это даёт возможность не делать длинную надпись на кнопке, а сделать краткую вынеся разъяснение в всплывающую подсказку. Например, вместо того чтобы писать на кнопке "Выход из программы", пишу кратко "Выход", а на всплывающей подсказке выводится подробнее "Выход из программы". Это маленькая, но важная вещь в программе, ведь форма это то, что постоянно видит пользователь программы, она на его глазах. Клиент не видит кривизны кода, но видит графическое и функциональное представление формы программы и должен оставаться довольным.

Наверх к содержанию страницы

Шаблоны кода

Исследуя пункты меню системы Lazarus нашёл в пункте меню "Сервис" подпункт "Шаблоны кода", которые вызвали интерес, как у человека который никогда не программировал на языке Pascal, поэтому я решил скапировать их на эту страницу чтобы они были вместе и рядом для обзора и размышлении с целью применения. Причём вертикальной палочкой показано место где будет располагаться курсор чтобы начать дорабатывать программый код.



array[$param(0)..$param(1)] of $param(Type) = (|);  

$Param(VariableName): array[0..$Param(HighNumber)] of $Param(String); |
begin | end;
begin | end else begin end;
case $param(var) of : |; : ; else ; end;
case $param(var) of : |; : ; end;
$Param(ClassName) = class($Param(InheritedClass)) private protected public | constructor Create; override; destructor Destroy; override; published end;
$Param(ClassName) = class($Param(InheritedClass)) | end;
$Param(ClassName) = class($Param(InheritedClass)) private public | constructor Create; destructor Destroy; override; end;
debugln(['$ProcedureName() '|]);
for $Param(CounterVar) := $Param(0) to $Param(Count) - 1 do begin | end;
for $Param(CounterVar) := $Param(0) to $Param(Count) - 1 do |
{$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} |
function $param(Name)($param( )): $param(Type); begin | end;
HexStr(PtrUInt(|),8)
if $Param(Conditional) then begin | end;
if $Param(Conditional) then | else
if $Param(Conditional) then begin | end else begin end;
if $Param(Conditional) then |
of |$OfAll()end;
procedure $Param(ProcName)|($Param()); begin | end;
{ TODO -o$Param(Author) : $Param(Note) } |
$Param(VarName) := $Param(TMyClassName).Create; try | finally $Param(VarName,Sync=1).Free; end;
try | except end;
try | finally $Param(FreeStatement,default) end;
writeln('$ProcedureName() '|);
while $Param(LoopCondition) do begin | end;
while $Param(LoopCondition) do |
with $Param(Object) do begin | end;
with $Param(Object) do begin Name:='$Param(NameText)'; Parent:=Self; Left:=$Param(0); Top:=$Param(0); Width:=$Param(0); Height:=$Param(0); Caption:='$Param(CaptionText)'; end; |
with $Param(Object) do |

А исходный код моей первой программы пока такой:



program start;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, Unit1
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; ToggleBox1: TToggleBox; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ToggleBox1Change(Sender: TObject); procedure ToggleBox1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.ToggleBox1Change(Sender: TObject); begin end; procedure TForm1.ToggleBox1Click(Sender: TObject); begin end; procedure TForm1.Button1Click(Sender: TObject); begin end; end.
И эта программа пока ничего не делает. Ни одна строчка кода не была написана в ручную, хотя она выводит форму с расположенными на ней элементами, параметры которых задавались в графическом интерфейсе и таблицах свойств. В чём и заключаются некоторые (но не все) преимущества визуальной среды разработки программного обеспечения.

Видно что, однострочные комментарии задаются двумя косыми чертами // как в современном Си, а многострочные комментарии задаются фигурными скобками {}, которые в Си определяют начало и конец блока.

Начало же и конец блока в Паскале видимо обозначают слова begin и end. И как я заметил, что после end бывает или точка, или точка с запятой, или ничего - и с этим надо ещё хорошенько разбираться.

Наверх к содержанию страницы

Опыт работы с Lazarus

В этой статье описывается эксперементальная работа новичка в IDE Lazarius. Статья состоит из трёх частей: 1. Попытка менять цвета элементов (для разминки). 2. Загрузка текстов из файла в многострочное поле и наоборот (основная часть). 3. Как выйти из программы (к качестве логического заключения, которое я чуть было не забыл, но всё же вспомнил и доэксперементировал до конца).

Попытка менять цвета элементов

Поскольку пользовательский интерфейс очень важен для восприятия программы клиентом, то была предпринята попытка менять цвета у стандартных графических элементов в системе Lazarus. Использовалось свойство Color таких элементов как форма, кнопка и многострочное поле ввода называемое в этой системе объектом класса TMemo.

Значение свойства Color было изменено на значения различных оттенков зелёного цвета. При этом фон формы и многострочного поля ввода успешно поменялись. У последнего полоса прокрутки так и осталась стандартного цвета. А вот фон кнопки совершенно не поменялся. Возможно, что это свойство у кнопки как-то переопределяется по особенному.

Загрузка текстов из файла в многострочное поле и наоборот

Прочитал в книге Экспресс курс программирования в Lazarus, автор: Е.А.Попов, следующее:

Для загрузки текста из файла пользуйтесь методом LoadFromFile объекта Lines, а для сохранения текста в файл методом SaveToFile того же объекта. Оба метода берут в качестве параметра строку с именем файла.
И это было в разделе про TMemo. Тогда я решил испытать эти видимо практически часто используемые свойства. Для чего создал кнопку Button_LoadFromFile с надписью "Load From File" и кнопку Button_SaveToFile с надписью "Save To File". Это делается элементарно просто в среде Lazarus с помощью рисования кнопок на форме и задания их своиств Caption и Name.

Далее всё намного сложнее: прямо на редактируемой форме два раза кликаем на кнопке и попадаем в тот участок кода который отвечает за реакцию на щелчёк по этой кнопке во время исполнения программы. Это дело для меня не новое - прежде я работал на Visul Basic шестой версии, который в отличие от Lazarus не поддерживал уникодные надписи при визуальной разработке форм и приходилось давать клиенту вместе с исполнимым файлом ещё бейсиковские библиотеки и компоненты, а в Lazarus всё подобное видимо вшивается в исполнимый файл, что лично для меня намного удобнее и хлопот меньше, да и мозги парить не надо как это будет выглядеть в иноязычном Windowsе. Вот это действительно прогресс в сфере информационных и компьютерных технологий.

Ну ладно, что-то я отвлёкся, вернёмся к делу. И так я попал в код:



procedure TForm1.Button_LoadFromFileClick(Sender: TObject);
begin

end;

А курсор мигает на строчке между begin и end; . К тому же написано, что это процедура кнопки Button_LoadFromFileClick на форме TForm1. Теперь мне надо каким-то образом загнать в многострочное Memo1 класса TMemo текст из файла, ну пусть, unicode.txt. Попытка как говорится не пытка. Создаю файл unicode.txt с любым многоязычным текстом.

Теперь в заветном месте кода пишу Memo1, ставлю точку и вот она мая радость - выпадающее меню, но в нём нет LoadFromFile значит текст надо загонять не прямо в него, а во что-то из тго что выпадает. Смотрю на свойства кнопки - там есть Lines для ввода текста и в выпадающем меню оно тоже есть, выбираю его, опять точка и вот я вижу заветное LoadFromFile после которого проставились скобки и точка с запятой - чем-то похоже на Си.

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

Сколько не маленький, но всёж успех. Помню, что в RichTextBox в Visual Basicе текст намного дольше загонял, хотя он и был с разнообразным форматированием.

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



Memo1.Lines.SaveToFile('new_unicode.txt');

Уверенный успех. Наверное вы догадались, что я проделал всё тоже самое, но только для другой кнопки. Мне кажется это легко понять.

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



procedure TForm1.Button_LoadFromFileClick(Sender: TObject);
begin
      Memo1.Lines.LoadFromFile('unicode.txt');
end;

procedure TForm1.Button_SaveToFileClick(Sender: TObject);
begin
      Memo1.Lines.SaveToFile('new_unicode.txt');
end;

Как выйти из программы

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



procedure TForm1.Button1Click(Sender: TObject);
begin
	Close;
end;

Наверх к содержанию страницы

Внешние ссылки: Аллах Тагаләнең исемнәре.

hsta.ru
Копирование материалов сайта запрещено.
Copyright © 2011-2017