Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

наследование обработчиков


Страницы:   1 2

Delphist2 ©   (2010-07-09 00:39:00) 

Создаю класс-наследник:
type
TMyPanel = class(TPanel)
 public
 procedure CMKeyDown(var Message:TMessage); message WM_KEYDOWN;
end;


Нужно обрабатывать еще и событие OnMouseDown, поэтому пишу обработчик:
procedure TMyPanel1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
...

Но обработчик не выполняется. Почему? И еще в примере было написано CM_KEYDOWN, но у компилятор ругается что undeclared identifier.


Anatoly Podgoretsky   (2010-07-11 10:25:00) [1]

Создание справки Эмбакадеро хочет перенести на плечи пользователей.


Германн   (2010-07-11 02:14:00) [2]


> KilkennyCat ©   (11.07.10 01:52) [20]

:)
Хм. А что нынче и хелп по последним версиям Дельфи делается в вики?


KilkennyCat   (2010-07-11 01:52:00) [3]


> это неизвестный науке зверь

http://docwiki.embarcadero.com/VCL/en/CtlPanel


Германн   (2010-07-11 01:38:00) [4]


> Delphist2   (11.07.10 01:02) [16]
>
> А исходник TPanel - это в файле ctlPanel.pas?

С какого перепуга он там оказался? Испокон веков он был в ExtCtrls.
И там есть и OnMouseDown и OnMouseMove и т. д. Но не они тебе нужны.
А ctlPanel.pas - это неизвестный науке зверь. Где ты его нашел?


> > Зачем оно тебе, это программирование?
>
> Интересно.

Интересно - купи книжку и прочитай. Потом уж начинай тыкать пальцем в кнопки.


Delphist2   (2010-07-11 01:19:00) [5]

Нет, на исходник панели этот файл мало походит


KilkennyCat   (2010-07-11 01:16:00) [6]


> там не указано никаких событий связанных с mouse, но при
> этом все подобные события панель обрабатывает?

в наследство досталось.


Delphist2   (2010-07-11 01:02:00) [7]

А исходник TPanel - это в файле ctlPanel.pas? Если да, то почему там не указано никаких событий связанных с mouse, но при этом все подобные события панель обрабатывает? Там нет ни OnMouseDown, ни OnMouseMove и т. д.
А я в своем классе должен обязательно указывать событие MouseDown через override. В чем разница?


> Зачем оно тебе, это программирование?

Интересно.


Anatoly Podgoretsky   (2010-07-09 11:57:00) [8]

Хочется помучаться
(с) Сухов


Плохиш   (2010-07-09 10:23:00) [9]


> Delphist2   (09.07.10 04:21) [10]

Зачем оно тебе, это программирование?


Leonid Troyanovsky   (2010-07-09 08:03:00) [10]


> Leonid Troyanovsky ©   (09.07.10 07:58) [12]

Тьфу-ты.

   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;

sorry

--
Regards, LVT.


Leonid Troyanovsky   (2010-07-09 07:58:00) [11]


> Delphist2   (09.07.10 04:21) [10]

> То мне компилятор скажет нет такого метода (PanelMouseDown)
> в базовом классе.


procedure DoMouseDown(var Message: TWMMouse;
 Button: MouseButton; Shift: TShiftState); override;

--
Regards, LVT.


Anatoly Podgoretsky   (2010-07-09 07:38:00) [12]

Читает, но явно не понимает, что читает.


Delphist2   (2010-07-09 04:21:00) [13]

Замещение - это же override?
Если я напишу так:
type
TMyPanel = class(TPanel)
 public
 procedure CMKeyDown(var Message:TMessage); message CN_KEYDOWN;
 procedure PanelMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer); override;
end;

То мне компилятор скажет нет такого метода (PanelMouseDown) в базовом классе. А как он там именуется-то? OnMouseDown тоже не подходит


Германн   (2010-07-09 02:57:00) [14]

<offtop>
Чего-то я "раздухарился" сего дни.
</offtop>
:)


Германн   (2010-07-09 02:55:00) [15]


Что статью накопал - хорошо. Что прочитал и разобрался в теме - отлично.
Блин, но вот что странно. Ведь все это и еще очень многое другое есть в книжках по Паскалю. Так почему же люди КАЖДЫЙ раз тратят километры времени на поиск информации по КАЖДОЙ незнакомой теме вместо того, чтобы ОДИН раз прочитать ОДНУ книжку?

(с) Юрий Зотов
Не удержался от цитирования.
Везёт некоторым на учителей. Другие помогают себе сами, ибо думают сами.
Третьи ...
Хотя автор может перейти во вторую категорию.


Германн   (2010-07-09 02:25:00) [16]


> тут, похоже, наоборот.

Об этом ЮЗ уже написал.
Хочешь собственную функциональность при, например, нажатии на кнопку мыши, замещай процедуру предка. А события (Events) компонента не для этого предназначены.


Германн   (2010-07-09 02:18:00) [17]


> Delphist2   (09.07.10 01:51) [2]
>
>
> > В каком примере?
>
> http://www.delphisources.ru/pages/faq/base/create_panel_descendant.
> html
>

Пример неправильно понят и использован.


Германн   (2010-07-09 02:16:00) [18]


> тут, похоже, наоборот. да и вообще речь о классе, а не о
> компоненте

TMyPanel = class(TPanel)Как раз о компоненте.


KilkennyCat   (2010-07-09 01:53:00) [19]


> Обработчик события компонента должен быть не в самом компоненте,
>  а в программе, которая его использует.
>


тут, похоже, наоборот. да и вообще речь о классе, а не о компоненте, но из приведенного кода совершенно вообще неясно, что есть что и в частности MyPanel1.


Юрий Зотов   (2010-07-09 01:53:00) [20]

> Delphist2   (09.07.10 00:39)  

> Но обработчик не выполняется. Почему?
Надо не обработчик писать, а заместить метод MouseDown.

> CM_KEYDOWN, но у компилятор ругается что undeclared identifier.
Нет такого сообщения, что-то напутано. Есть WM_KEYDOWN и CN_KEYDOWN.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо