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

Вниз

наследование обработчиков   Найти похожие ветки 

 
Delphist2   (2010-07-09 00:39) [0]

Создаю класс-наследник:
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.


 
Германн ©   (2010-07-09 01:00) [1]

Не надо путать сообщения Windows (WM_xxx) и Дельфийские внутренние сообщения контроллов (СМ_ххх).

> И еще в примере было написано CM_KEYDOWN

В каком примере?

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

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


 
Delphist2   (2010-07-09 01:51) [2]


> В каком примере?

http://www.delphisources.ru/pages/faq/base/create_panel_descendant.html

> Не надо путать сообщения Windows (WM_xxx) и Дельфийские
> внутренние сообщения контроллов (СМ_ххх).

А в примере тогда почему не работает?

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

Так у меня и так в программе, рядом с др. обработчиками. Они выполняются а этот нет.


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

> Delphist2   (09.07.10 00:39)  

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

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


 
KilkennyCat ©   (2010-07-09 01:53) [4]


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


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


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


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

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


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


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

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


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


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

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


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


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

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


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

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


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

Замещение - это же 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 тоже не подходит


 
Anatoly Podgoretsky ©   (2010-07-09 07:38) [11]

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


 
Leonid Troyanovsky ©   (2010-07-09 07:58) [12]


> Delphist2   (09.07.10 04:21) [10]

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


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

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-07-09 08:03) [13]


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

Тьфу-ты.

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

sorry

--
Regards, LVT.


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


> Delphist2   (09.07.10 04:21) [10]

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


 
Anatoly Podgoretsky ©   (2010-07-09 11:57) [15]

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


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

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


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

Интересно.


 
KilkennyCat ©   (2010-07-11 01:16) [17]


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

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


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

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


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


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

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


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

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


 
KilkennyCat ©   (2010-07-11 01:52) [20]


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

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


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


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

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


 
Anatoly Podgoretsky ©   (2010-07-11 10:25) [22]

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



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

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

Наверх





Память: 0.5 MB
Время: 0.004 c
4-1235666335
_bass
2009-02-26 19:38
2010.10.03
Поиск хэндла.


15-1278528220
Knight
2010-07-07 22:43
2010.10.03
Пакетная обработка архивов RAR


2-1279059236
AKE
2010-07-14 02:13
2010.10.03
Как поведёт себя команда Readln(F, var1, var2,..., varn)??


2-1278996425
azamatufa
2010-07-13 08:47
2010.10.03
Подскажите как правильно выводить отчет в Word


15-1278262287
AlexDn
2010-07-04 20:51
2010.10.03
Hello World!





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