Главная страница
    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.044 c
1-1080803587
Dmitrij_K
2004-04-01 11:13
2004.04.18
Проблема с Word ом


1-1080735344
Настенька
2004-03-31 16:15
2004.04.18
объединение ячеек в сринггриде


14-1079893373
Soft
2004-03-21 21:22
2004.04.18
Генератор матов!


6-1076900173
Alek Aaz
2004-02-16 05:56
2004.04.18
DNS кэш


14-1080097484
Думкин
2004-03-24 06:04
2004.04.18
С днем рождения! 24 марта.





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