Файл: Разработка справочной системы по визуальным компонентам интегрированной среды разработки lazarus.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 18.10.2024

Просмотров: 24

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Компонент 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 IdIthen

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