Как уже отмечалось в главе 5, особенностью тестирования компонента является то обстоятельство, что на момент тестирования еще не произведена всесторонняя проверка и отладка компонента, так что в большинстве случаев тестирование проводится до регистрации компонента в среде Delphi.

Чтобы протестировать компонент, создайте специальный проект, подключите к нему модуль компонента и создавайте компонент на этапе прогона программы.

ПРИМЕЧАНИЕ -

Все компоненты, рассматриваемые в главах 14 и 15, снабжены программами тестирования TestXXXX.dpr, где ХХХХ - имя компонента. Вы можете запустить с прилагаемого к книге компакт-диска соответствующие исполняемые файлы и посмотреть тот или иной компонент в действии без его регистрации в Delphi.

10.1.1. Создание программы тестирования

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

Для примера рассмотрим программу тестирования компонента ГатРгодгезв, описываемого в 15.1. Этот компонент представляет собой улучшенный вариант стандартного компонента ProgressBar. В отличие от последнего, обе его полосы - левая (перекрывающая) и правая (перекрываемая) - могут отличаться не только цветом, но и эффектом объема: любая из них может быть выпуклой, вдавленной или плоской. Для этого в компоненте предусмотрены такие свойства:

type TBorderStyle = (bsFlat, bsRecessed, bsRaised);
property LeftBorderStyle: TBorderStyle;
property RightBorderStyle: TBorderStyle;

Кроме того, компонент может показывать процент выполненной работы. Для этого у него имеется логическое свойство ShowPercent: если оно содержит True, компонент показывает процент выполненной работы.

Цифры процента могут оттеняться. Свойство ShadowDepth определяет расстояние в пикселах между основной надписью и ее тенью, смещенной вниз и вправо.

Цвета левой полосы, правой полосы, надписи процентов и ее тени задаются, соответственно, свойствами Lef tColor, RightColor, Fontcolor и ShadowColor.

Компонент может очерчиваться трехмерной рамкой, толщина которой определяется значением свойства BorderWidth.

Наконец, свойства Мах и Progress определяют текущее состояние компонента. (В отличие от компонента ProgressBar, у компонента FarProgress отсутствует свойство Min, которое всегда равно 0.) Таким образом, тестовая программа должна не только создать компонент, но и обеспечить доступ ко всем перечисленным свойствам.

На рис. 10.1 показано главное окно тестовой программы на этапе проектирования, на рис. 10.2 - то же окно при прогоне программы, а в листинге 10.1 представлен модуль главного окна тестовой программы (см. проект $(S0URCE)\ Chl4\TestFarProgress.dpr).

10.1. Тестирование компонента

Рис. 10.1. Окно тестовой программы на этапе проектирования

10.1. Тестирование компонента

Рис. 10.2. Окно программы TestFarProgress.dpr

Листинг 10.1. Модуль главного окна тестовой программы unit Unitl;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Spin;
type TForml - class(TForm) tbPercent: TTrackBar;
ColDia: TColorDialog;
Labell: TLabel;
Label2: TLabel;
seBWidth: TSpinEdit;
stLeftColor: TStaticText;
stRightColor: TStaticText;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
stFontColor: TStaticText;
cbLeftStyle: TComboBox;
Label6: TLabel;
Label7: TLabel;
cbRightStyle: TComboBox;
cbShowPercent: TCheckBox;
Label8: TLabel;
seFontSize: TSpinEdit;
Label9: TLabel;
seShadow: TSpinEdit;
Label10: TLabel;
stShadColor: TStaticText;
procedure FormCreate(Sender: TObject);
procedure tbPercentChange(Sender: TObject);
procedure seBWidthChange(Sender: TObject);
procedure stLeftColorClick(Sender: TObject);
procedure stRightColorClick(Sender: TObject);
procedure cbRightStyleChange(Sender: TObject);
procedure cbLeftStyleChange(Sender: TObject);
procedure stFontColorClick(Sender: TObject);
procedure cbShowPercentClick(Sender: TObject);
procedure seFontSizeChange(Sender: TObject);
procedure seShadowChange(Sender: TObject);
procedure stShadColorClick(Sender: TObject);
private { Private declarations }
public { Public declarations } end;
var
Forml: TForml;
implementation uses FarProgress; {$R *.dfm} var
Progress: TFarProgress;
procedure TForml.FormCreate(Sender: TObject);

// Создает компонент и устанавливает его положение на форме

begin
Progress :- TFarProgress.Create(Self);
Progress.Parent := Self;
Progress.Left := (Width - Progress.Width) div 2; Progress.Top := 40;
end;
procedure TForml.tbPercentChange(Sender: TObject); // Изменение процента связано с изменением положения // ползунка компонента tbPercent begin
Progress.Progress :~ tbPercent.Position end;
procedure TForml.seBWidthChange(Sender: TObject);
продолжение &

Листинг 10.1 (продолжение) // Изменение толщины рамки связано с изменением значения

// свойства seBWidth. Value

begin
Progress.BorderWidth := seBWidth.Value end;
procedure TForml.stLeftColorClick(Sender: TObject); // Щелчок на компоненте stLeft создает диалоговое окно // для выбора цвета левой панели begin
if ColDia.Execute then begin
stLeftColor.Color := ColDia.Color;
Progress.LeftColor := ColDia.Color end; * end;
procedure TForml.stRightColorClick(Sender: TObject); // Щелчок на компоненте stRight создает диалоговое окно // для выбора цвета правой панели begin
if ColDia.Execute then begin
stRightColor.Color := ColDia.Color;
Progress.RightColor := ColDia.Color end end;
procedure TForml.cbRightStyleChange(Sender: TObj ect); // Изменение выбора в компоненте cbRight связано // с изменением стиля правой панели begin
Progress.RightBorderStyle := TBorderStyle(cbRightStyle.Itemlndex) end;
procedure TForml.cbLeftStyleChange(Sender: TObject); // Изменение выбора в компоненте cbleft связано // с изменением стиля левой панели begin
Progress.LeftBorderStyle :^ TBorderStyle(cbLeftStyle.Itemlndex) end;
procedure TForml.stFontColorClick(Sender: TObject); // Щелчок на компоненте stFont создает диалоговое окно // для выбора цвета надписи процента begin
if ColDia.Execute then
begin
stFontColor.Color := ColDia.Color;
Progress.Font.Color := ColDia.Color;
end end;
procedure TForml.cbShowPercentClick(Sender: TObject);

// Изменение состояния флажка cbShowPercent

begin
Progress.ShowPercent := cbShowPercent.Checked end;
procedure TForml.seFontSizeChange(Sender: TObject); // Изменение свойства seFontSize.Value связано // с изменением высоты шрифта символов процента begin
Progress.Font.Size := seFontSize.Value;
end;
procedure TForml.seShadowChange(Sender: TObject); // Изменение свойства seShadow.Value связано // с изменением свойства Progress.ShadowDepth begin
Progress.ShadowDepth := seShadow.Value end;
procedure TForml.stShadColorClick(Sender: TObject);

// Щелчок на компоненте stLShad создает диалоговое окно

// для выбора цвета тени

begin
if ColDia.Execute then begin
stShadColor.Color : = ColDia.Color;
Progress.ShadowColor ColDia.Color;
end end;

end.

Несколько пояснений. Прежде всего, обратите внимание на присваивание свойству Parent компонента значения Self в обработчике события OnCreate главной формы: если этого не сделать, компонент не получит сигнала о том, что пора себя отрисовать. Дело в том, что компонент FarProgress порожден от TGraphicControl и, следовательно, не имеет собственной оконной процедуры. Все сообщения операционной системы ему транслирует оконный компонент-контейнер, в который он помещен. В нашем случае таким контейнером является форма главного окна. Присваивание свойству Parent компонента значения

Self приводит к тому, что ссылка на компонент заносится в список свойства Controls формы, поэтому в момент своей отрисовки форма известит об этом все дочерние компоненты и, в том числе, компонент FarProgress.

ВНИМАНИЕ -

При динамическом создании визуальных неоконных компонентов нужно установить в их свойства Parent ссылки на оконный компонент-контейнер, иначе созданные компоненты не будут видны на экране.

В списки Items компонентов cbLef tStyle и cbRightStyle на этапе проектирования формы заносятся значения типа TBorderStyle в порядке их перечисления. Это позволяет установить однозначную связь между свойствами Itemlndex этих компонентов и значениями свойств Lef tBorderStyle и RightBorderStyle компонента FarProgress. Вспомните, значениями перечисленного типа на самом деле являются целые неотрицательные числа: первое значение перечисления определяется числом 0, второе - числом 1, и т. д. Явное приведение типа Integer к типу TBorderStyle необходимо для обеспечения синтаксической корректности присваивания.

СОВЕТ -

Для выбора нужного значения перечисленного свойства в тестовой программе удобно использовать списки ListBox со значением csDropDownList их свойств Style: если в этом случае поместить в строки свойств Items компонентов названия значений соответствующих типов в порядке их перечисления, то между свойствами Itemlndex списков и значениями перечислений устанавливается однозначная связь.

В результате для присвоения, например, свойству Lef tBorderStyle компонента нового значения достаточно просто привести индекс Itemlndex списка к типу перечисления:

Progress.LeftBorderStyle := TBorderStyle(cbLeftStyle.Itemlndex)

Тестирование, оформление и регистрация компонента || Оглавление || 10.1.2. Основные приемы отладки в среде Delphi


Искусство создания компонентов Delphi



Новости за месяц

  • Август
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс