Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-64095
swamp
2003-03-10 12:44
2003.03.20
Разрушить компонент


7-64411
tim5
2003-01-26 20:54
2003.03.20
Скрытие кнопку Пуск


1-64193
ден555
2003-03-08 14:34
2003.03.20
Как открыть файл?


3-64026
Melbis
2003-03-01 17:38
2003.03.20
Не срабатывает событие OnDrawDataCell


4-64424
Evgeniy Startsev
2003-01-25 15:18
2003.03.20
Message LVM_SCROLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский