Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Вниз
Помогите с компонентом Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c