ошибка при компиляции своего компонента

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
earendill
новенький
Сообщения: 10
Зарегистрирован: 18.02.2009 06:43:42

ошибка при компиляции своего компонента

Сообщение earendill »

Доброго времени суток всем!
Такой вопрос
компонент потомок от TWinControl в него встроен компонент типа панель
при добавлении строчки

Код: Выделить всё

TPanel(heder).OnClick:=HederClick

ругается. Говорит следующую фразу
v2\unit1.pas(319,33) Error: Incompatible types: got "untyped" expected "<procedure variable type of procedure(TObject) of object;Register>"
как победить эту ситуацию?
Использую лазарус 9.28.2 по виндой
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

метод HederClick должен быть методом класса и иметь тип TNotifyEvent

примерно так:

Код: Выделить всё

TSomeClass = class
public
  procedure HederClick(sender: Tobject)
end;
earendill
новенький
Сообщения: 10
Зарегистрирован: 18.02.2009 06:43:42

Сообщение earendill »

дык он и есть метод класса

Код: Выделить всё

  { TtreeItem }
  TtreeItem = class(TWinControl)
  private
    Heder:    TPanel;
 ...
    procedure WMLButtonDown(var Message: TLMLButtonDown); message LM_LBUTTONDOWN;
    procedure WMRButtonDown(var Message: TLMRButtonDown); message LM_RBUTTONDOWN;
    procedure WMMButtonDown(var Message: TLMMButtonDown); message LM_MBUTTONDOWN;
    procedure WMMouseMove(var Message: TLMMouseMove); message LM_MOUSEMOVE;
    procedure WMLButtonUp(var Message: TLMLButtonUp); message LM_LBUTTONUP;
    procedure WMRButtonUp(var Message: TLMRButtonUp); message LM_RBUTTONUP;
    procedure WMMButtonUp(var Message: TLMMButtonUp); message LM_MBUTTONUP;
    procedure WMMouseWheel(var Message: TLMMouseEvent); message LM_MOUSEWHEEL;
    procedure WMLButtonDBLCLK(var Message: TLMLButtonDblClk); message LM_LBUTTONDBLCLK;
    procedure SetCaption(Value: string);
  public
    constructor Create(AOwner: TComponent); override;
    property Caption: string Read ACaption Write ACaption;
    destructor Destroy; override;
    property Visible: boolean Read AVisible Write AVisible;
    property Name: string Read AName Write AName;
    property Toolorweld : Ttoolorweld read AToolorWeld write AToolorweld default twTool;
    procedure Hide;
    procedure expand;
    procedure HederClick (Sender : TObject);
  end; 
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

earendill

Код: Выделить всё

TPanel(heder).OnClick:=@HederClick
earendill
новенький
Сообщения: 10
Зарегистрирован: 18.02.2009 06:43:42

Сообщение earendill »

спасибо за помощь
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

earendill
Там надо адрес процедуры присваивать, как у Mr.Smart в примере, а Вы пытаетесь присвоить значение процедуры. ;)
Ответить