Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

Помогите с компонентом   Найти похожие ветки 

 
axs ©   (2003-03-07 09:07) [0]

unit NSimg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, ExtCtrls;
type
TNSimg = class(TImage)
private
{ Private declarations }
FMouseE, FMouseL : TNotifyEvent;
protected
{ Protected declarations }
procedure CMMouseenter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseleave(var Message: TMessage); message CM_MOUSELEAVE;
public
{ Public declarations }
published
{ Published declarations }
property OnMouseEnter : TNotifyEvent read FMouseE write FMouseE;
property OnMouseLeave : TNotifyEvent read FMouseL write FMouseL;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Standard", [TNSimg]);
end;

procedure TNSimg.CMMouseenter;
begin
if Assigned(OnMouseEnter) then OnMouseEnter(Self);
end;

procedure TNSimg.CMMouseleave;
begin
if Assigned(OnMouseLeave) then OnMouseLeave(Self);
end;

end.

Кто скажет что здесь не так??? Из-за этого компонента возникают какието глюки с памятью!!!


 
Anatoly Podgoretsky ©   (2003-03-07 09:19) [1]

Здесь все так.


 
axs ©   (2003-03-07 09:28) [2]

Да как так??? Ну тогда как программно его уничтожить
NSimg1.Free ???
Я уже ни чего не понимаю!!! В чем у меня глюки???
Все наверное буду бросать этот проект!!!


 
axs ©   (2003-03-07 09:31) [3]

Можеть надо написать какой нить метод destroy
И ещё воть эту штуку FMouseE, FMouseL : TNotifyEvent; надо как нить в методе destroy очищать или нет???
Я просто впервые в своей жизни создал этот компонет :)


 
Юрий Зотов ©   (2003-03-07 09:40) [4]

1. В обработчиках сообщений нет вызова inherited. То есть, нарушены внутренние механизмы VCL.
2. Очищать ничего не нужно.
3. Лучше ввести методы диспетчеризации (могут быть потомки).
4. Лучше работать с полями, а не со свойствами (могут быть потомки).

Вот аналогичный пример, но написанный по всем канонам.

unit MyPaintBox;

interface

uses
Messages, Classes, Controls, ExtCtrls;

type
TMyPaintBox = class(TPaintBox)
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
procedure MouseEnter; dynamic;
procedure MouseLeave; dynamic;
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Samples", [TMyPaintBox])
end;

{ TMyPaintBox }

procedure TMyPaintBox.CMMouseEnter(var Message: TMessage);
begin
inherited;
MouseEnter
end;

procedure TMyPaintBox.CMMouseLeave(var Message: TMessage);
begin
inherited;
MouseLeave
end;

procedure TMyPaintBox.MouseEnter;
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self)
end;

procedure TMyPaintBox.MouseLeave;
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self)
end;

end.



 
Anatoly Podgoretsky ©   (2003-03-07 09:58) [5]

axs © (07.03.03 09:31)
Персональный Destroy здесь не требуется, ну а по культуре написания Юрий тебе лекцию прочел.


 
axs ©   (2003-03-07 10:03) [6]

Спасибо за совет!!! С меня пиво :)
P.S. Я эту страничку сохранил на будущее... :)



Страницы: 1 вся ветка

Текущий архив: 2003.03.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-64123
Monak
2003-03-10 22:59
2003.03.20
Зашивка


1-64115
multik
2003-03-10 21:22
2003.03.20
Привет всем !!! Работа с treeview и imagelis.


1-64072
Сергеевич
2003-03-10 01:20
2003.03.20
Записать в файл


1-64075
ДмирийК
2003-03-07 08:59
2003.03.20
Размер exe файла.


1-64121
snake1977
2003-03-07 09:59
2003.03.20
FileListBox