Главная » Delphi » Проверка компонента

0

Несмотря на весь оптимизм и радость, вызванные завершением создания компо нента, не спешите добавлять вновь созданный компонент в палитру  компонентов, по ка он не будет тщательно отлажен. Следует  обязательно провести предварительную проверку, создав проект, в котором используется динамический экземпляр нового компонента. Дело в том,  что  во время  разработки компонент находится в среде  IDE. Если в нем содержится ошибка, приводящая к сбою в памяти, то это может,  ко всему прочему, привести к зависанию самой  среды  разработки Delphi. В листинге 11.9 со держится модуль,  предназначенный для  проверки компонента TddgExtendedMemo, создание которого описано в настоящей главе  далее.  Этот  проект находится на при лагаемом CD под именем  TestEMem.dpr.

Листинг 11.9. TddgExtendedMemo

unit MainFrm;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, exmemo, ExtCtrls;

type

TMainForm = class(TForm) btnCreateMemo: TButton; btnGetRowCol: TButton; btnSetRowCol: TButton; edtColumn: TEdit; edtRow: TEdit;

Panel1: TPanel;

procedure btnCreateMemoClick(Sender: TObject);

procedure btnGetRowColClick(Sender: TObject);

procedure btnSetRowColClick(Sender: TObject);

public

EMemo: TddgExtendedMemo;        // Объявление компонента.

procedure OnScroll(Sender: TObject);

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.btnCreateMemoClick(Sender: TObject);

{ Динамическое создание компонента. Удостоверьтесь, что всем

свойствам присвоены надлежащие значения, необходимые для правильной

работы компонента. Эти значения зависят от проверяемого компонента.

}begin

if not Assigned(EMemo) then begin

EMemo := TddgExtendedMemo.Create(self);

EMemo.Parent := Panel1;

EMemo.ScrollBars := ssBoth;

EMemo.WordWrap := True;

EMemo.Align := alClient;

// Присвоить обработчики проверяемым событиям.

EMemo.OnVScroll := OnScroll;

EMemo.OnHScroll := OnScroll;

end;

end;

{ Создайте все методы, необходимые для проверки поведения компонента во время выполнения, в том числе методы доступа ко всем новым свойствам и методам компонента.

Создайте также обработчики пользовательских событий, чтобы их можно было проверить. Поскольку компонент создается во время выполнения, обработчики событиям придется присвоить вручную, как это сделано в конструкторе Create(). }

procedure TMainForm.btnGetRowColClick(Sender: TObject);

begin

if Assigned(EMemo) then

ShowMessage(Format(‘Row: %d        Column: %d’,

[EMemo.Row, EMemo.Column]));

EMemo.SetFocus;

end;

procedure TMainForm.btnSetRowColClick(Sender: TObject);

begin

if Assigned(EMemo) then begin

EMemo.Row := StrToInt(edtRow.Text);

EMemo.Column := StrToInt(edtColumn.Text);

EMemo.SetFocus;

end;

end;

procedure TMainForm.OnScroll(Sender: TObject);

begin

MessageBeep(0);

end;

end.Имейте в виду, что даже проверка компонента в режиме разработки не позволя ет избежать неприятных инцидентов. Некоторые действия программы могут при вести  к зависанию самой  среды  разработки  Delphi —  если  забыть, например,  вы звать унаследованный конструктор Create().НА ЗАМЕТКУ

Не думайте, что во время разработки компонент создается и устанавливается самой средой разработки Delphi — он становится “пригодным к употреблению” только после выполнения конструктора Create(). Следовательно, не нужно рассматривать метод Loaded() как  часть  процесса создания  компонента. Метод  Loaded() вызывается только при загрузке компонента из потока (например, когда его помещают в форму во время разработки). Метод Loaded() отмечает конец процесса загрузки из потока. Ес- ли компонент был создан, а не загружен из потока, то метод Loaded() не вызывается.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии