Delphi 2009 не назначает события пользовательских компонентов - PullRequest
3 голосов
/ 13 февраля 2012

Я создал пользовательский компонент TCustomHTTPReqResp , унаследованный от THTTPReqResp .

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

Однако, если назначить его накод на Form.Create т.е.:

CustomHTTPReqResp1.OnBeforeGet := CustomHTTPReqResp1BeforeGet;

это работает.Кроме этого все остальное работает просто отлично.

Что-то не так сделали?Заранее спасибо.

Вот код для пользовательского компонента:

unit CCustomHTTPReqResp;

interface

uses
  SysUtils, Classes, Dialogs, SOAPHTTPTrans;

type
  TCustomHTTPReqResp = class(THTTPReqResp)
  private
    { Private declarations }
    FOnBeforeGet: TNotifyEvent;
    procedure DoOnBeforeGet;
  protected
    { Protected declarations }
    procedure SetOnBeforeGet(const AOnBeforeGet: TNotifyEvent);
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
    procedure Get(Resp: TStream); override;
  published
    { Published declarations }

    { Events }
    property OnBeforeGet: TNotifyEvent read FOnBeforeGet write SetOnBeforeGet;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('My Components', [TCustomHTTPReqResp]);
end;

{ TCustomHTTPReqResp }

constructor TCustomHTTPReqResp.Create(Owner: TComponent);
begin
  inherited Create(Owner);
  // Code here.
end;

destructor TCustomHTTPReqResp.Destroy;
begin
  // Code here.
  inherited;
end;

procedure TCustomHTTPReqResp.SetOnBeforeGet(const AOnBeforeGet: TNotifyEvent);
begin
  FOnBeforeGet := AOnBeforeGet;
end;

procedure TCustomHTTPReqResp.DoOnBeforeGet;
begin
  if Assigned(FOnBeforeGet) then
  begin
    FOnBeforeGet(Self);
  end
  else
  begin
    MessageDlg('No Before Post Event Handler found!', mtInformation, mbOKCancel, 0);
  end;
end;

procedure TCustomHTTPReqResp.Get(Resp: TStream);
begin
  // Raise OnBeforeGet.
  DoOnBeforeGet;
  inherited Get(Resp);
end;


end.

1 Ответ

0 голосов
/ 15 февраля 2012

Спасибо всем за комментарии и спасибо TLama за подсказку.

Оказывается, я ошибся в форме.Я удалил пользовательский элемент управления на форме из палитры инструментов, а также создал еще один элемент в Form.Create с тем же именем, и я думаю, что это вызвало проблему.Исправлено сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...