Файл: Разработка справочной системы по визуальным компонентам интегрированной среды разработки lazarus.docx
Добавлен: 18.10.2024
Просмотров: 30
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Глава 1. Интегрированная среда разработки Lazarus
1.1 Языки программирования: понятие, этапы развития, классификация
1.2 Среда разработки программных продуктов Lazarus
1.3 Основные объекты программных компонентов Lazarus
1.3.1 Вкладка Палитры компонентов Standard
1.3.2 Вкладка Палитры компонентов Additional
1.3.3 Общие свойства компонентов
Глава 2. Разработка справочной системы по визуальным компонентам Lazarus
2.4 Компоненты, использованные в приложении
Компонент TBevel служит для визуального разделения окна.
Основное предназначение компонента TMemo – работа с большим количеством строк (ввод, отображение и редактирование текстового материала).
Компонент TUpDown позволяет изменять значения от минимального до максимального с определенным шагом, обычно привязан к какому-либо компоненту для вывода значения. В примере используется для перемещения фигуры TShape.
Компонент TShape служит для создания фигур (треугольников, кругов или квадратов) на поверхности родительского компонента.
На форме, демонстрирующей некоторые визуальные компоненты (Form3), используется компонент TBitBtn – кнопка с возможностью добавления рисунка на кнопку и возможностью возврата модального результата. Она не требует программирования обработчика события OnClick, если выбрано конкретное свойство Kind.
Компонент TreeView служит для показа иерархических данных. Отображение имеет древовидную структуру, в которой можно выбрать необходимый узел или узлы. Нумерация узлов дерева ведется как по главным узлам, так и по сквозному принципу, начиная с 0.
Заполнить компонент TreeView можно из внешнего файла, хранящегося в рабочей папке Help. Такая организация вывода информации позволяет оперативно менять содержимое справочника без изменений в коде программы.
Все записи в TreeView имеют свой абсолютный индекс, начиная с 0, этот же индекс используется в наименовании файлов справки, каждый файл создается с типовым именем IndexNN.html и помещается в папку Help. По мере обращения файлы, содержащие в своем имени индекс выбранного раздела, выводятся на форму. Рисунки, использующиеся в файлах html, хранятся в папке Index.files и имееют подобную нумерацию: NN-mm.jpg, где NN – номер записи в списке разделов справки, mm – номер рисунка по порядку в файле справки.
Компонент TipHtmlPanel предназначен для отображения HTML-страницы, он является частью пакета Turbopower Internet Pro, обеспечивающий собственный доступ к HTML. Этот компонент доступен на вкладке Ipro палитры компонентов.
В компонент TIpHtmlPanel выводится справочная информация, хранящаяся в файлах с расширением html. Предварительно требуется связать этот компонент с невизуальным компонентом TipFileDataProvider через свойство DataProvider компонента TipHtmlPanel.
Компонент TIpFileDataProvider является интерфейсом между TipHtmlPanel и файловой системой и расположен на той же вкладке, что и TIpHtmlPanel. Компонент TIpFileDataProvider обрабатывает запросы на изображения и другие файлы и позволяет отображать HTML-файл в окне компонента TIpHtmlPanel.
В отличие от компонента TWebBrowser, имеющегося в Delphi, который использует Internet Explorer (IE), установленный в операционной системе Windows, компонент TIpHtmlPanel в Lazarus независим от IE. В этом его преимущество, но и недостаток также, поскольку отображение файлов HTML с использованием стилей, например, уже требует дополнительных усилий от программиста. Кроме того, этот компонент не принимает файлы, подготовленные, например, в Word, и поэтому требуется писать чистый код HTML. Но это небольшие недостатки в сравнении с возможностью редактирования справочника без переписывания кода приложения. То есть можно не только поменять список разделов справочника, но изменять само содержание справочника, дополняя его. При этом подойдёт даже Блокнот, поскольку рисунки можно вставить в текст, прописывая ссылку на них в HTML-код.
Выбор компонента TIpHtmlPanel для вывода различных разделов в одно окно значительно уменьшают размеры программы.
Заключение
В процессе выполнения настоящей курсовой работы мы познакомились с интегрированной средой разработки Lazarus, изучили различные ресурсы по компонентам библиотеки LCL.
В результате изучения информации были выделены общие свойства визуальных компонентов и их общие события, выделена основная информация по компонентам, а затем скомпонована в файлы html, чтобы быть включенной в справочную систему.
Также в результате выполнения настоящей курсовой работы было разработано приложение, которое реализует справочную систему по визуальным компонентам Lazarus на основе набора из html файлов, подключаемых к приложению по мере выбора соответствующей строки из списка компонентов.
Также к приложению был добавлен простой пример применения визуальных компонентов и изменения их свойств, чтобы начинающему программисту можно было не только изучить справку, но и увидеть некоторые компоненты в действии.
Поставленные в начале работы задачи были выполнены, цель курсовой работы достигнута.
Список использованной литературы
1. Алексеев Е. Р., Чеснокова О. В., Кучер Т. В. Free Pascal и Lazarus: Учебник по программированию / Е. Р. Алексеев, О. В. Чеснокова, Т. В. Кучер – М. : ALT Linux ; Издательский дом ДМК-пресс, 2010. – 440 с.
2. Ачкасов В.Ю. Программирование на Lazarus/ В.Ю. Ачкасов – М.: Национальный Открытый Университет «ИНТУИТ», 2016. – 521 с.
3. Гуриков С.Р. Программирование в среде Lazarus. Учебное пособие. – М.: Издательство «Форум», 2019. – 336 с.
4. Мансуров К.Т. Основы программирования в среде Lazarus, 2010. – 772 с.
5. Одинцов И.О. Профессиональное программирование. Системный подход. – СПб.: БВХ-Петербург, 2004. – 624 с.
6. LCL Components/ru – [Электронный ресурс] – Режим доступа: https://wiki.lazarus.freepascal.org/LCL_Components/ru (дата обращения: 10.05.2022)
7. История версий Delphi. – URL: http://bourabai.ru/einf/Delphi/history.htm (дата обращения: 21.10.2017)
8. Lazarus. – [Электронный ресурс] – Режим доступа: https://gospodaretsva.com/category/lazarus (дата обращения: 21.10.2017)
9. Клейменова Е.М. АНАЛИЗ СОВРЕМЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ // Материалы VIII Международной студенческой электронной научной конференции «Студенческий научный форум» – [Электронный ресурс] – Режим доступа: http://www.scienceforum.ru/2016/1508/20094 (дата обращения: 10.05.2022).
10. Семухин С. О. Сравнительный анализ языков программирования // Научно-методический электронный журнал «Концепт». – 2015. – Т. 35. – С. 166–170. – [Электронный ресурс] – Режим доступа: http://e-koncept.ru/2015/95588.htm (дата обращения: 10.05.2022)
ПРИЛОЖЕНИЕ A
Листинг приложения
unit fUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, LazHelpHTML, ComCtrls,
StdCtrls, Ipfilebroker, IpHtml;
type
{ TForm1 }
TForm1 = class(TForm)
BtnOk: TButton;
BtnExit: TButton;
Button1: TButton;
Label1: TLabel;
procedure BtnExitClick(Sender: TObject);
procedure BtnOkClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
ProgramPath:string;
implementation
uses hlpUnit,ExampleUnit;
{$R *.lfm}
{ TForm1 }
procedure TForm1.BtnExitClick(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.BtnOkClick(Sender: TObject);
begin
Form1.Hide;
Form2.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;
Form3.ShowModal;
Form1.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ProgramPath:=ExtractFileDir(ParamStr(0));
end;
end.
unit hlpUnit;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls,
StdCtrls, IpHtml, Ipfilebroker, StrUtils;
type
{ TForm2 }
TForm2 = class(TForm)
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
btnExit: TButton;
btnBack: TButton;
btnNext: TButton;
btnSort: TButton;
btnCancelSort: TButton;
IpFileDataProvider1: TIpFileDataProvider;
IpHtmlPanel1: TIpHtmlPanel;
TreeView1: TTreeView;
procedure btnBackClick(Sender: TObject);
procedure btnCancelSortClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnSortClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
private
public
end;
mList=array[0..2,1..100] of string;
var
Form2: TForm2;
IdI, IdP: integer;
Stek: string;
FList:TextFile;
implementation
uses fUnit;
{$R *.lfm}
function StekPrev(var s:string):integer;
var i, k:integer;
begin
i:=Length(s);
if i=3 then
k:=-1
else
begin
while s[i]<>'/' do
i:=i-1;
k:=StrToInt(AnsiRightStr(s,Length(s)-i));
s:=AnsiLeftStr(s,i-1);
result:=k;
end;
end;
{ TForm2 }
procedure TForm2.FormActivate(Sender: TObject);
begin
TreeView1.Height:=Form2.ClientHeight-2;
Bevel1.Height:=Form2.ClientHeight-2;
Bevel1.Left:=Form2.ClientWidth div 4;
Bevel2.Top:=Form2.ClientHeight-40;
Bevel2.Width:=Form2.ClientWidth-Bevel1.Left-5;
Bevel3.Top:=Form2.ClientHeight-35;
Bevel3.Left:=Bevel1.Left+3+(Form2.ClientWidth-Bevel1.Left) div 3;
Bevel4.Top:=Form2.ClientHeight-35;
Bevel4.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnExit.Top:=Form2.ClientHeight-35;
btnExit.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnExit.Height:=33;
btnBack.Top:=Form2.ClientHeight-35;
btnBack.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnBack.Height:=33;
btnNext.Top:=Form2.ClientHeight-35;
btnNext.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnNext.Height:=33;
btnSort.Width:= Bevel1.Left div 2 - 2;
IpHtmlPanel1.Width:=Form2.ClientWidth-Bevel1.Left-10;
IpHtmlPanel1.Height:=Bevel2.Top-3;
IpHtmlPanel1.Left:=Bevel1.Left+3;
IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index.html');
IdI:=-1;
stek:=IntToStr(IdI);
end;
procedure TForm2.btnExitClick(Sender: TObject);
begin
IpHtmlPanel1.SetHtmlFromStr('');
Close;
Form1.Show;
end;
procedure TForm2.btnNextClick(Sender: TObject);
var Node:TTreeNode;
begin
if IdI
begin
IdI:=IdI+1;
IdP:=Idp+1;
stek:=stek+'/'+IntToStr(IdI);
TreeView1.Selected:=treeview1.Items[IdI];
Form2.Caption:=treeview1.Selected.text;
IpHtmlPanel1.SetHtmlFromStr('');
IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index'+inttostr(IdI)+'.html');
IpHtmlPanel1.Refresh;
IpHtmlPanel1.SetFocus;
end
else
begin
IdI:=0;
IdP:=Idp+1;
stek:=stek+'/'+IntToStr(IdI);
TreeView1.Selected:=treeview1.Items[IdI];
Form2.Caption:=treeview1.Selected.text;
IpHtmlPanel1.SetHtmlFromStr('');
IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index'+inttostr(IdI)+'.html');
IpHtmlPanel1.Refresh;
IpHtmlPanel1.SetFocus;
end;
end;
procedure TForm2.btnSortClick(Sender: TObject);
begin
TreeView1.AlphaSort;
end;
procedure TForm2.btnBackClick(Sender: TObject);
var k: integer;
begin
if IdI=-1 then IdI:=0; //если дошли до начала, то встаем на первый
k:=StekPrev(stek); //идем назад по стеку
if k=IdI then k:=StekPrev(stek); //повторяем, чтобы не загружать повторно текущий файл
if IdP>1 then
begin
IdI:=k; //запоминаем предыдущий
IdP:=IdP-1;//уменьшаем счетчик пройденных страниц
TreeView1.Selected:=treeview1.Items[IdI]; //переход на предыдущий
Form2.Caption:=treeview1.Selected.text; //прописываем в заголовке формы
IpHtmlPanel1.SetHtmlFromStr(''); //загружаем страничку
IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index'+inttostr(IdI)+'.html');
IpHtmlPanel1.Refresh;
IpHtmlPanel1.SetFocus;
end
else
begin
IdI:=-1; //если ещё не было переходов по страницам
IdP:=0; //счетчик нулевой
stek:='-1/';//стек нулевой
TreeView1.Selected:=treeview1.Items[IdI+1]; //в дереве встаем на первый пункт
Form2.Caption:=treeview1.Selected.text;
IpHtmlPanel1.SetHtmlFromStr(''); //загружаем стартовую страницу
IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index.html');
IpHtmlPanel1.Refresh;
IpHtmlPanel1.SetFocus;
end;
end;
procedure TForm2.btnCancelSortClick(Sender: TObject);
var dirpath:string;
begin//заполнение TreeView из файла
dirpath:=fUnit.ProgramPath+'\Help\List.dat';
if FileExists(dirpath) then
begin
TreeView1.LoadFromFile(Dirpath);
end;
IpHtmlPanel1.SetHtmlFromStr('');
if IdI<>-1 then IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index'+inttostr(IdI)+'.html')
else IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index.html');
IpHtmlPanel1.Refresh;
IpHtmlPanel1.SetFocus;
end;
procedure TForm2.FormCreate(Sender: TObject);
var dirpath:string;
begin
TreeView1.Color:=Form2.Color;
//заполнение TreeView из файла
dirpath:=fUnit.ProgramPath+'\Help\List.dat';
if FileExists(dirpath) then
begin
TreeView1.LoadFromFile(Dirpath);
end;
IdI:=-1;
IdP:=0;
stek:='-1/';
end;
procedure TForm2.FormResize(Sender: TObject);
begin
TreeView1.Height:=Form2.ClientHeight-2;
Bevel1.Height:=Form2.ClientHeight-2;
Bevel1.Left:=Form2.ClientWidth div 4;
Bevel2.Top:=Form2.ClientHeight-40;
Bevel2.Width:=Form2.ClientWidth-Bevel1.Left-5;
Bevel3.Top:=Form2.ClientHeight-35;
Bevel3.Left:=Bevel1.Left+3+(Form2.ClientWidth-Bevel1.Left) div 3;
Bevel3.Height:=33; Bevel4.Height:=33;
Bevel4.Top:=Form2.ClientHeight-35;
Bevel4.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnExit.Top:=Form2.ClientHeight-35;
btnExit.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnExit.Height:=33; btnBack.Height:=33; btnNext.Height:=33;
btnBack.Top:=Form2.ClientHeight-35;
btnBack.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
btnNext.Top:=Form2.ClientHeight-35;
btnSort.Width:= Bevel1.Left div 2 - 2;
btnNext.Left:=Bevel1.Left+3+2*((Form2.ClientWidth-Bevel1.Left) div 3);
IpHtmlPanel1.Width:=Form2.ClientWidth-Bevel1.Left-10;
IpHtmlPanel1.Height:=Bevel2.Top-3;
IpHtmlPanel1.Left:=Bevel1.Left+3;
end;
procedure TForm2.TreeView1Click(Sender: TObject);
begin
IdI:=TreeView1.Selected.AbsoluteIndex;
IdP:=Idp+1;
stek:=stek+'/'+IntToStr(IdI);
Form2.Caption:=treeview1.Selected.text;
//По умолчанию в WebBrowser1 ничего не показывается
IpHtmlPanel1.SetHtmlFromStr('');
IpHtmlPanel1.OpenURL(fUnit.ProgramPath+'\Help\Index'+inttostr(IdI)+'.html');
IpHtmlPanel1.Refresh;
IpHtmlPanel1.SetFocus;
end;
end.
unit ExampleUnit;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons,
ExtCtrls, ComCtrls;
type
{ TForm3 }
TForm3 = class(TForm)
BitBtn1: TBitBtn;
CheckGroup1: TCheckGroup;
ComboBox1: TComboBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Memo1: TMemo;
Panel1: TPanel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ScrollBar1: TScrollBar;
ScrollBar2: TScrollBar;
ScrollBar3: TScrollBar;
Shape1: TShape;
UpDown1: TUpDown;
UpDown2: TUpDown;
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox1Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean);
procedure UpDown2Changing(Sender: TObject; var AllowChange: Boolean);
private
public
end;
var
Form3: TForm3;
implementation
uses fUnit;
{$R *.lfm}
{ TForm3 }
procedure TForm3.ScrollBar1Change(Sender: TObject);
begin
Shape1.Brush.color:=RGBToColor(ScrollBar1.Position,ScrollBar2.Position,ScrollBar3.Position);
edit1.text:=ScrollBar1.Position.ToString;
edit2.text:=ScrollBar2.Position.ToString;
edit3.text:=ScrollBar3.Position.ToString;
Shape1.Pen.Color:= RGBToColor(255-ScrollBar1.Position,255-ScrollBar2.Position,255-ScrollBar3.Position);
Memo1.Clear;
Memo1.Lines.Add('Изменение цвета фигуры');
end;
procedure TForm3.UpDown1Changing(Sender: TObject; var AllowChange: Boolean);
begin
Shape1.Top:=UpDown1.Position;
Memo1.Clear;
Memo1.Lines.Add('Перемещение фигуры по вертикали');
end;
procedure TForm3.UpDown2Changing(Sender: TObject; var AllowChange: Boolean);
begin
Shape1.Left:=UpDown2.Position;
Memo1.Clear;
Memo1.Lines.Add('Перемещение фигуры по горизонтали');
end;
procedure TForm3.ComboBox1Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0: Shape1.Shape:=stCircle;
1: Shape1.Shape:=stEllipse;
2: Shape1.Shape:=stRectangle;
3: Shape1.Shape:=stSquare;
4: Shape1.Shape:=stTriangle;
end;
end;
procedure TForm3.ComboBox1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('Выбор формы фигуры');
end;
procedure TForm3.RadioButton1Click(Sender: TObject);
begin
if RadioButton1.Checked then Shape1.visible:=true else Shape1.visible:=false;
Memo1.Clear;
Memo1.Lines.Add('Отображение фигуры включено');
end;
procedure TForm3.RadioButton2Click(Sender: TObject);
begin
if RadioButton2.Checked then Shape1.visible:=false else Shape1.visible:=true;
Memo1.Clear;
Memo1.Lines.Add('Отображение фигуры выключено');
end;
end.
1 2 3