16220

Создание Help-файла

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №8 Создание Helpфайла Цель работы: Изучить способы создания Helpов Постановка задачи: Разработать Helpфайл поддерживающий контекстнозависимую помощь для задачи вычисления определенного интеграла. Создать содержание и текст составленный не мене

Русский

2013-06-20

132 KB

6 чел.

Лабораторная работа №8

Создание Help-файла

Цель работы: Изучить способы создания Help-ов

Постановка задачи: Разработать  Help-файл, поддерживающий контекстно-зависимую помощь для задачи вычисления определенного интеграла. Создать содержание и текст, составленный не менее чем из 3-х разделов. Обеспечить связь между разделами с помощью гипертекстовых ссылок.

Краткие теоретические сведения:

Для создания файла справки минимальными средствами необходим текстовый редактор поддерживающий формат rtf и программа Microsoft Help Workshop (она находится в каталоге Delphi\help\tools\hcrtf.exe).

Для создания текстового файла справки используется любой текстовый редактор, например редактор Microsoft Word XP. Файл может включать в себя, помимо текста, графические изображения.

Разделы файла справки связаны между собой ссылками.

Каждый раздел может содержать следующие атрибуты:

  •  Контекст - #
  •  Заголовок - $
  •  Список ключевых слов - k
  •  Порядковый номер в последовательности просмотра разделов - +
  •  Тег компиляции - *
  •  Макрокоманда - !

Из всех атрибутов обязателен только контекст представляющий собой идентификатор раздела. Атрибуты задаются сносками.

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

1) название, которое отобразится на экране

2) ссылка на раздел

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

Вторая часть ссылки выделяется скрытым текстом и пользователю не видна. Она содержит идентификатор раздела.

Обе части ссылки записываются подряд бес пробелов.

Текст программы:

<Project>

program Integral;

uses

 Forms,

 UDisplayForm in 'UDisplayForm.pas' {Form1},

 UCalc in 'UCalc.pas';

{$R *.res}

begin

 Application.Initialize;

 Application.HelpFile := 'D:\UniverCity\semester 4\ÊÏèßÏ\Lab08\Lab08.hlp';

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.

<UDisplayForm>

unit UDisplayForm;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Series, ExtCtrls, StdCtrls, TeEngine, TeeProcs, Chart, Buttons, UCalc;

type

 TForm1 = class(TForm)

   Edit2: TEdit;

   Edit1: TEdit;

   MethodSelector: TRadioGroup;

   DisplayChart: TChart;

   SeriesFunction: TLineSeries;

   Label1: TLabel;

   Label2: TLabel;

   Label4: TLabel;

   SeriesPatterned: TAreaSeries;

   FunctionFormula: TImage;

   Label3: TLabel;

   Edit3: TEdit;

   SpeedButton1: TSpeedButton;

   Edit4: TEdit;

   Panel1: TPanel;

   Label5: TLabel;

   Panel2: TPanel;

   CheckBox1: TCheckBox;

   SpeedButton2: TSpeedButton;

   procedure FormCreate(Sender: TObject);

   procedure SomeEditKeyPress(Sender: TObject; var Key: Char);

   procedure SpeedButton1Click(Sender: TObject);

   procedure SomeEditChange(Sender: TObject);

   procedure MethodSelectorClick(Sender: TObject);

   procedure CheckBox1Click(Sender: TObject);

   procedure FormShow(Sender: TObject);

   procedure FormClick(Sender: TObject);

   function f2(x: Extended): Extended;

   procedure SpeedButton2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 e1, e2, e3: string;

 p1, p2, p3: integer;

 integ: TIntegral;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var b: TBitmap;

begin

 b:=TBitmap.Create;

 b.LoadFromResourceName(hInstance, 'INTEGRAL');

 b.Transparent:=true;

 b.TransparentColor:=clWhite;

 FunctionFormula.Width:=b.Width;

 FunctionFormula.Height:=b.Height;

 FunctionFormula.Canvas.Brush.Color:=$00BAEDEF;

 FunctionFormula.Canvas.FillRect(Rect(0, 0, b.Width, b.Height));

 FunctionFormula.Canvas.StretchDraw(Rect(0, 0, b.Width-1, b.Height-1), b);

 b.Free;

 Panel1.Left:=FunctionFormula.Left+FunctionFormula.Width;

 Panel1.Height:=FunctionFormula.Height;

 Panel1.Top:=FunctionFormula.Top;

 integ:=TIntegral.Create;

 integ.Chart:=DisplayChart;

end;

//Edited

procedure TForm1.SomeEditKeyPress(Sender: TObject; var Key: Char);

begin

 if Sender=Edit3 then

 begin

   p3:=Edit3.SelStart;

   exit;

 end;

 if (Sender=Edit2) then

   p2:=Edit2.SelStart;

 if (Sender=Edit1) then

   p1:=Edit1.SelStart;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

 Application.Terminate;

end;

procedure TForm1.SomeEditChange(Sender: TObject);

var r: real;

   s: string;

begin

 if Sender=Edit3 then

 begin

   try

     integ.N:=StrToInt((Sender as TEdit).Text);

     e3:=Edit3.Text;

   except

     on EConvertError do begin

                               Edit3.Text:=e3;

                               Edit3.SelStart:=p3;

                             end;

   end;

 end

 else if ((Sender=Edit1) or (Sender=Edit2)) then

 begin

   if true then

   begin

       try

         r:=StrToFloat((Sender as TEdit).Text);

         e1:=Edit1.Text;

         e2:=Edit2.Text;

       except

         on EConvertError do begin

                               if Sender=Edit1 then

                               begin

                                 (Sender as TEdit).Text:=e1;

                                 (Sender as TEdit).SelStart:=p1;

                               end

                               else if Sender=Edit2 then

                               begin

                                 (Sender as TEdit).Text:=e2;

                                 (Sender as TEdit).SelStart:=p2;

                               end;

                               exit;

                             end;

       end;

       if Sender=Edit2 then

       begin

         integ.B:=r;

         //Application.MessageBox(PChar(floattostr(integ.Res)),'');

         s:=FloatToStr(integ.B);

         FunctionFormula.Canvas.TextRect(Rect(0, 0, 155, 18), 87-FunctionFormula.Canvas.TextWidth(s) div 2, 2, s)

       end

       else

       begin

         integ.A:=r;

         s:=FloatToStr(integ.A);

         FunctionFormula.Canvas.TextRect(Rect(0, 58, 155, 74), 87-FunctionFormula.Canvas.TextWidth(s) div 2, 60, s);

       end;

   end

   else

   begin

       FunctionFormula.Canvas.Font.Size:=10;

       if Sender=Edit2 then

         FunctionFormula.Canvas.TextRect(Rect(0, 0, 155, 18), 87-FunctionFormula.Canvas.TextWidth('') div 2, 2, '')

       else

         FunctionFormula.Canvas.TextRect(Rect(0, 58, 155, 74), 87-FunctionFormula.Canvas.TextWidth('') div 2, 60, '');

   end;

 end;

 if integ.Res=0 then

   Edit4.Text:='Неверные данные!'

 else

   Edit4.Text:=FloatToStr(integ.Res);

end;

procedure TForm1.MethodSelectorClick(Sender: TObject);

begin

 integ.CalcMethod:=MethodSelector.ItemIndex;

 if integ.Res=0 then

   Edit4.Text:='Неверные данные!'

 else

   Edit4.Text:=FloatToStr(integ.Res);

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

 SeriesPatterned.AreaLinesPen.Visible:=(Sender as TCheckBox).Checked;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

 SomeEditChange(Edit1);

 SomeEditChange(Edit2);

end;

procedure TForm1.FormClick(Sender: TObject);

begin

 integ.f:=f2;

end;

function TForm1.f2(x: Extended): Extended;

begin

 Result:=x*x*3;

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

 Application.HelpCommand(HELP_FINDER, 10);

end;

end.

<UCalc>

unit UCalc;

interface

uses Chart;

const funcCount=4;

type

    TValueChangedFunc=procedure (newValue: Extended);

    TF=function (x: Extended): Extended of object;

    TIntegral=class

     private

       FValueMin: Extended;//Нижняя граница

       FValueMax: Extended;//Верхняя граница

       FValueH: Extended; //Ширина шага

       FRes: Extended;    //Результат

       FValueN: Integer;  //Количество шагов

       FCalcMethod: Byte; //Номер выбранного способа подсчёта (0-трап.; 1-лев.прямоуг.; 2-прав.прямоуг.; 3-средн.прямоуг)

       FAutoRedraw: Boolean; //Перерисовывать при изменении хотя бы одного параметра

       FChart: TChart;

       FOnMinChanged: TValueChangedFunc;

       FOnMaxChanged: TValueChangedFunc;

       FOnNChanged: TValueChangedFunc;

       FOnHChanged: TValueChangedFunc;

       FF: TF;          //Функция подынтегральная

     protected

       procedure SetN(newN: integer); virtual;

       procedure SetH(newH: Extended); virtual;

       procedure SetMin(newMin: Extended); virtual;

       procedure SetMax(newMax: Extended); virtual;

       procedure SetCalcMethod(newMethod: byte); virtual;

       procedure SetChart(newChart: TChart); virtual;

       procedure SetF(newF: TF);

     public

       constructor Create();

       destructor Destroy; override;

       property A: Extended read FValueMin write SetMin;//Нижняя граница

       property B: Extended read FValueMax write SetMax;//Верхняя граница

       property N: integer read FValueN write SetN default 10;//Количество шагов

       property H: Extended read FValueH write SetH;//Ширина одного шага

       property CalcMethod: byte read FCalcMethod write SetCalcMethod default 0;   //Номер выбранного способа подсчёта (0-трап.; 1-лев.прямоуг.; 2-прав.прямоуг.; 3-средн.прямоуг)

       property Chart: TChart read FChart write SetChart;

       property AutoRedraw: boolean read FAutoRedraw write FAutoRedraw default true;//Перерисовывать при изменении хотя бы одного параметра

       property Res: Extended read FRes;

       //События (на изменение каждого из параметров)

       property OnMinChanged: TValueChangedFunc read FOnMinChanged write FOnMinChanged default nil;

       property OnMaxChanged: TValueChangedFunc read FOnMaxChanged write FOnMaxChanged default nil;

       property OnNChanged: TValueChangedFunc read FOnNChanged write FOnNChanged default nil;

       property OnHChanged: TValueChangedFunc read FOnHChanged write FOnHChanged default nil;

       //Подынтегральная функция

       function fDefault(x: Extended): Extended; virtual;

       //

       property f: TF read FF write SetF;

       //Функции подсчёта результата

       procedure ReCalc(); virtual;

       function calc_trapezium: Extended; virtual;

       function calc_rectangle_left: Extended; virtual;

       function calc_rectangle_right: Extended; virtual;

       function calc_rectangle_media: Extended; virtual;

       //Функции вывода информации в компонент TChart

       procedure Redraw(); virtual;

       procedure draw_f; virtual;

       procedure draw_trapezium; virtual;

       procedure draw_rectangle_left; virtual;

       procedure draw_rectangle_right; virtual;

       procedure draw_rectangle_media; virtual;

    end;

implementation

constructor TIntegral.Create();

begin

 inherited Create();

 FValueMax:=1;

 FValueMin:=0;

 FValueH:=0.1;

 FAutoRedraw:=true;

 FF:=fDefault;

 N:=10;

end;

destructor TIntegral.Destroy;

begin

 inherited Destroy;

end;

procedure TIntegral.SetN(newN: integer);

begin

 FValueN:=newN;

 if FValueN<1 then

   FValueN:=1;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnNChanged) then

   FOnNChanged(FValueN);

 if Assigned(FOnHChanged) then

   FOnHChanged(FValueH);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetH(newH: Extended);

begin

 FValueN:=round((FValueMax-FValueMin)/newH)+1;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnNChanged) then

   FOnNChanged(FValueN);

 if Assigned(FOnHChanged) then

   FOnHChanged(FValueH);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetMin(newMin: Extended);

begin

 FValueMin:=newMin;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnMinChanged) then

   FOnMinChanged(newMin);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetMax(newMax: Extended);

begin

 FValueMax:=newMax;

 FValueH:=(FValueMax-FValueMin)/FValueN;

 if Assigned(FOnMaxChanged) then

   FOnMaxChanged(newMax);

 if (AutoRedraw) then

   Redraw();

 ReCalc();

end;

procedure TIntegral.SetChart(newChart: TChart);

begin

 FChart:=newChart;

 if (AutoRedraw) then

   Redraw();

end;

procedure TIntegral.SetCalcMethod(newMethod: byte);

begin

 if (newMethod in [0..3]) then

 begin

   FCalcMethod:=newMethod;

   if (AutoRedraw) then

     Redraw();

   ReCalc();

 end;

end;

procedure TIntegral.SetF(newF: TF);

begin

 if (@newF<>nil) then

 begin

   FF:=newF;

   ReCalc;

   Redraw;

 end;

end;

procedure TIntegral.ReCalc;

begin

   FRes:=0;

   if FValueMin<FValueMax then

   begin

     case FCalcMethod of

     0: FRes:=calc_trapezium();

     1: FRes:=calc_rectangle_left();

     2: FRes:=calc_rectangle_right();

     3: FRes:=calc_rectangle_media();

     end;

   end;

end;

function TIntegral.calc_trapezium: Extended;

var x: extended;

   i: integer;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to FValueN do

 begin

   Result:=Result+(f(x)+f(x+FValueH))/2*FValueH;

   x:=x+FValueH;

 end;

end;

function TIntegral.calc_rectangle_left:Extended;

var i:integer;

   x:extended;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to n do

   begin

     Result:=Result+FValueH*f(x);

     x:=x+FValueH;

   end;

end;

function TIntegral.calc_rectangle_right:Extended;

var i:integer;

   x:extended;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to n do

   begin

     Result:=Result+FValueH*f(x+FValueH);

     x:=x+FValueH;

   end;

end;

function TIntegral.calc_rectangle_media:Extended;

var i:integer;

   x:extended;

begin

 Result:=0;

 x:=FValueMin;

 for i:=1 to n do

   begin

     Result:=Result+FValueH*f(x+FValueH/2);

     x:=x+FValueH;

   end;

end;

procedure TIntegral.Redraw;

begin

 if (Assigned(FChart) and (FValueMin<FValueMax)) then

 begin

   draw_f;

   case FCalcMethod of

   0: draw_trapezium();

   1: draw_rectangle_left();

   2: draw_rectangle_right();

   3: draw_rectangle_media();

   end;

 end

 else if Assigned(FChart) then

 begin

   Chart.Series[0].Clear;

   Chart.Series[1].Clear;

   Chart.LeftAxis.Maximum:=0;

 end;

end;

procedure TIntegral.draw_f;

var rightRange, x, h1: extended;

begin

 if Assigned(FChart) then

 begin

   FChart.Series[1].Clear;

   rightRange:=FValueMax+(FValueMax-FValueMin)*0.1;

   x:=FValueMin-(FValueMax-FValueMin)*0.1;

   h1:=(rightRange-x)/50;

   rightRange:=rightRange+h1;

   while x<=rightRange do

   begin

     FChart.Series[1].AddXY(x, f(x));

     x:=x+h1;

   end;

   Chart.LeftAxis.Maximum:=f(x)*1.05;

 end;

end;

procedure TIntegral.draw_trapezium;

var x: extended;

   i: integer;

begin

 if Assigned(FChart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=0 to FValueN do

   begin

     FChart.Series[0].AddXY(x, f(x));

     x:=x+FValueH;

   end;

 end;

end;

procedure TIntegral.draw_rectangle_left;

var x: extended;

   i: integer;

begin

 if Assigned(FChart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=1 to FValueN do

   begin

     FChart.Series[0].AddXY(x, f(x));

     FChart.Series[0].AddXY(x+FValueH, f(x));

     x:=x+FValueH;

   end;

 end;

end;

procedure TIntegral.draw_rectangle_right;

var x: extended;

   i: integer;

begin

 if Assigned(FChart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=1 to FValueN do

   begin

     FChart.Series[0].AddXY(x, f(x+FValueH));

     FChart.Series[0].AddXY(x+FValueH, f(x+FValueH));

     x:=x+FValueH;

   end;

 end;

end;

procedure TIntegral.draw_rectangle_media;

var x: extended;

   i: integer;

begin

 if Assigned(Chart) then

 begin

   draw_f;

   FChart.Series[0].Clear;

   x:=FValueMin;

   for i:=1 to FValueN do

   begin

     Chart.Series[0].AddXY(x, f(x+FValueH/2));

     Chart.Series[0].AddXY(x+FValueH, f(x+FValueH/2));

     x:=x+FValueH;

   end;

 end;

end;

function TIntegral.fDefault(x: extended): extended;

begin

 Result:=Exp(sqr(x));

end;

end.

Результаты работы программы:

Выводы: таким образом, мы изучили способы создания справочной системы к программе с помощью WinHelp. Мы познакомились с правилами написания файла заготовки справочной системы (*.rtf) , с правилами подготовки файлов проекта.

Итак, мы написали программу, которая предоставляет пользователю справку по своим функциям, а также контекстно-зависимую помощь.


 

А также другие работы, которые могут Вас заинтересовать

82817. Защита интеллектуальной собственности 64.4 KB
  Проанализируем права которые включает в себя интеллектуальная собственность относящиеся к: литературным художественным и научным произведениям исполнительской деятельности артистов звукозаписи радио и телевизионным передачам изобретениям во всех областях человеческой деятельности...
82819. Ремонт водяного насосу 783.14 KB
  Залізничний транспорт відіграє важливу роль у функціонуванні та розвитку народного господарства країни і її економічних регіонів. Він забезпечує внутрішні зв’язки в системі матеріального виробництва, а також зовнішньоекономічні зв’язки із зарубіжними країнами.
82820. Выбор видеокарты 768.62 KB
  Задачи наилучшего выбора изучает теория принятия решений. С ее помощью можно научиться осуществлять выбор более обоснованно, эффективно используя имеющуюся в наличии информацию о предпочтениях.
82821. Декарбоксилирование Бартона 410.5 KB
  Декарбоксилирование Бартона - радикальная реакция, в которой карбоновую кислоту сначала преобразуется в гидроксамат эфира (как правило, называют эфир Бартона). Затем продукт нагревают в присутствии радикального инициатора и подходящего донора водорода для завершения восстановительного...
82822. Учения Фомы Аквинского о взаимоотношении церкви и государства 90 KB
  История политологии процесс постоянного обновления и обогащения ее теоретико-методологического и методического арсеналов. Августин происходил из небогатой провинциальной семьи и в молодости испытал влияние матери-христианки Моники но долгое время сохранял религиозную индифферентность.
82823. Экономическое развитие Древней Греции и Рима 34.45 KB
  Основными источниками пополнения рядов рабов были: 1 военнопленные и захваченные в плен мирные жители; 2 продаваемые правящей аристократией варварских народов соплеменники; 3 рожденные рабами дети; 4 люди захваченные пиратами и похитителями.
82824. Организация работы на посту сезонного технического обслуживания автомобилей 22.28 KB
  Организация работ по техническому обслуживанию легковых автомобилей строится в зависимости от их принадлежности к государственному или индивидуальному сектору. Организация работ по техобслуживанию автомобилей может быть бригадной или агрегатно-участковой.