Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Как создать обрабочик для события.   Найти похожие ветки 

 
rainy day   (2004-04-01 14:14) [0]

Здраствуйте, уважаемые. У меня появилась такая проблема:
Класс описывается на основе TMemo
(type ***=class(TMemo)
   [процедуры]

end;   )

Экземпляр класса я создаю из программы. Мне необходимы обработчики для некоторых событий, которыми обладает родительский класс (Tmemo)/ Например для Change.
Я не знаю как это сделать.
Я пробовал добавить описание процедуры [класс].[объект]Change в описание класса и в код - не получается.

Forever rain.


 
Digitman ©   (2004-04-01 14:21) [1]


> Я пробовал


а мы тут догадываться должны, что ты там в действительности пробовал


 
rainy day   (2004-04-01 14:26) [2]

Вот так описан класс//

type Tfield=class(TMEMO)
 public
  procedure Normal();
  function syntextest():boolean;
  procedure properties();
  procedure BuildCommandList(out CountCommandList:Word;out COuntConsist:word; out commandList:TypCommandlist; out CommandInfo:TypCommandInfo);
  function NomerBuKV(s:string):Byte;
  procedure Select(index:integer);
  procedure txtFieldChange(Sender: TObject);
 private
end;

Вот эта процедура не является обработчиком события (потому,что не меняется при изменении содержимого объекта). Почему не знаю.

Как сделать, чтобы она таковым стала или как сделать по другому.

Так понятнее?


 
Algol   (2004-04-01 14:31) [3]

Добавь метод  
procedure Change;override;
И в нем делай обработку события.


 
Digitman ©   (2004-04-01 14:39) [4]


> Мне необходимы обработчики для некоторых событий, которыми
> обладает родительский класс


ты его уже задекларировал в методе txtFieldChange()

в любом месте, например, в конструкторе просто назначь свой обработчик

OnChange := txtFieldChange;


 
LAMER100   (2004-04-01 14:43) [5]

в published надо прописать propery OnChange


 
rainy day   (2004-04-01 14:49) [6]

Спасибо за ответы!
Премного благодарен.


 
noname   (2004-04-01 15:00) [7]

Называние метода класса каким-бы то ни было именем в общем случае (не учитывая полиморфизма) не приведет к автоматическому вызову этого метода в экземпляре класса. Метод должен быть вызван явно (в Вашем коде или в унаследованном коде).
Либо используйте полиморфизм (в случае наследования класса) и переопределяйте унаследованные методы; либо привязывайте обработчики событий - в случае инкапсуляции объекта в классе; или при наследовании назначайте самому объекту свои же обрабочики (это в худшем случае), но делать это настоятельно не рекомендуется (лучше посмотрите код предка, определите, в каком методе вызывается обработчик события и переопределите этот метод).

Примеры:

Полиморфизм (см. [3]):
type
 TMyMemo = class(TMemo)  
   ...
   procedure Change; override;
   ...
 end;


Назначение обработчиков событий:
type
 TMyMemo = class(TCustomControl)
 private
   m_Memo: TMemo;
   procedure OnMemoChange(a_Sender: TObject);
 public
   constructor Create(a_Owner: TComponent);
 end;

implementation

procedure TMyMemo.OnMemoChange(a_Sender: TObject);
begin
 // делаем что-то
end;

constructor TMyMemo.Create(a_Owner: Tcomponent);
begin
 inherited Create(a_Owner);
 m_Memo := TMemo.Create(Self);
 m_Memo.Parent := Self;
 m_Memo.OnChange := OnMemoChange;
 ...
end;


Не забудьте, что в случае, если инкапсулированный объект унаследован не от TComponent (или в качестве Owner"а передан nil), Вам необходимо удалить его в деструкторе инкапсулирующего класса.



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

Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.027 c
7-1076620965
salex
2004-02-13 00:22
2004.04.18
Чтение HDD SMART


14-1080321864
Kor@l
2004-03-26 20:24
2004.04.18
Socket


6-1076419526
Павел
2004-02-10 16:25
2004.04.18
WinSocket, Proxy серверы и чат...


14-1080481558
Bumer
2004-03-28 17:45
2004.04.18
Не могу разобраться с Visual Basic ом


1-1080590705
Shopot
2004-03-30 00:05
2004.04.18
Горячие клавиши в Delphi.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский