Интернет решения от доктора Боба | страница 10
Компоненту TUUCode требуется событие типа TProgressEvent. Данному событию реально не требуется параметр sender (это всегда можно добавить позже), но ему необходим процент выполнения операции, для цели опишем следующий прототип:
>TProgressEvent = procedure(percent: Word) of object;
1.1.10. Сигнализаторы событий
Сигнализаторы событий требуются для указания обработчику события, что возникло указанное событие, что бы обработчик события смог бы выполнить свои действия. Сигнализаторы обычно виртуальные или динамические методы класса (подобно методу Click) или сообщения Windows, такие как callback ил notification сообщения.
В случае с компонентом TUUCode, сигнализатор интегрирован непосредственно в метод UUCode. После кодирования каждой строки, вызывается обработчик события назначенный OnProgress, реализация этого следующая:
>if Assigned(FOnProgress) then FOnProgress(trunc((100.0 * Size) / OutputBufSize))
Где Size это текущий размер или позиция в выходном буфере, и OutputBufSize это размер выходного файла. Size увеличивается от нуля до OutputBufSize, что означает, что обработчик события FOnProgress вызывается с аргументом от 0 до 100.
1.1.11. Регистрация компонента
При регистрации компонента TUUCode, полезно добавить редактор свойства FileName (InputFile), что обеспечит дополнительный комфорт для конечного пользователя. Редактор этого свойства реализован в модуле UUReg, который регистрирует компонент TUUCode в палитре компонентов Дельфи.
>unit UUReg;
> interface
> {$IFDEF WIN32}
> {$R UUCODE.D32}
> {$ELSE}
> {$R UUCODE.D16}
> {$ENDIF}
> uses
> DsgnIntf;
> type
> TFileNameProperty = class(TStringProperty)
> public
> function GetAttributes: TPropertyAttributes; override;
> procedure Edit; override;
> end;
> procedure Register;
> implementation
> uses
> UUCode, Classes, Dialogs, Forms, SysUtils;
> function TFileNameProperty.GetAttributes: TPropertyAttributes;
> begin
> Result := [paDialog]
> end{GetAttributes};
> procedure TFileNameProperty.Edit;
> begin
> with TOpenDialog.Create(Application) do
> try
> Title := GetName; { name of property as OpenDialog caption }
> Filename := GetValue;
> Filter := 'All Files (*.*)|*.*';
> HelpContext := 0;
> Options := Options +
> [ofShowHelp, ofPathMustExist, ofFileMustExist];
> if Execute then SetValue(Filename);
> finally
> Free
> end
> end{Edit};
> procedure Register;
> begin
> { component }
> RegisterComponents('DrBob42', [TUUCode]);