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

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

Свой обработчик для динамически созданного компонента [D7, XP]


Вася ©   (2010-03-29 04:37:00) 

создаю динамически tform:

newform:=tform.create(nil);
newform.visible:=true;


пытаюсь назначить ей свой onmousedown:

newform.onmousedown:=mouse_down;

а оно мне заявляет:

[Error] Incompatible types: 'method pointer and regular procedure'

в интернете написано что-то примерно подобное:

> смотрим описание класса TNotifyEvent
>  > type TNotifyEvent = procedure (Sender: TObject) of object;
> и думаем что означают в описании слова of object.


я к сожалению не знаю что это значит, но может всё-таки можно назначить туда обычную процедуру:

procedure mouse_down(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // объявление

implementation

...

procedure mouse_down(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// something //
end;


как вообще правильнее делать-то?(


Демо   (2010-03-29 15:55:00) [1]


> просто неизвестные мне.например от "инкапсуляция" каждый
> раз мурашки...какое-то жуткое слово...х_хот определений
> незнакомых понятий в википедии становится только непонятнее
> - в раскрытии каждого понятия снова незнакомые термины..
> .


А придётся поучиться.
Без понимания ООП в Delphi далее "Hello, World!" делать нечего.


Демо   (2010-03-29 15:53:00) [2]


> Плохиш ©   (29.03.10 14:29) [15]
> Сантехнику - сантехниково.


Садовнику - садовниково.


KSergey   (2010-03-29 15:37:00) [3]

> Вася   (29.03.10 14:04) [14]
> vcl удобно,не спорю...но не рационально же...

еще один рационализатор...

тогда пройдите на wasm.ru


Плохиш   (2010-03-29 14:29:00) [4]

Сантехнику - сантехниково.


Вася   (2010-03-29 14:04:00) [5]

а вообще ни разу не встречал на форумах или обучающих сайтах проектов где бы новые классы создавались с нуля...
только использование готовых обработчиков vcl или jedi...а там только обычное...

vcl удобно,не спорю...но не рационально же...


Вася   (2010-03-29 13:59:00) [6]

> brother ©   (29.03.10 12:36) [10]
> имхо, топик - развод ибо [2]


там всё в точности как у меня.и не работает.сам бы проверил сначала...=\\

> То есть, ты хочешь сказать, что в книге используются какие-
> то не такие слова?


просто неизвестные мне.например от "инкапсуляция" каждый раз мурашки...какое-то жуткое слово...х_х
от определений незнакомых понятий в википедии становится только непонятнее - в раскрытии каждого понятия снова незнакомые термины...


Омлет   (2010-03-29 12:49:00) [7]

> brother ©   (29.03.10 12:36) [10]
> имхо, топик - развод ибо [2]


А что такого в [2]? Не понял.


Метод   (2010-03-29 12:42:00) [8]

TButton, TForm - классы. Без классов в Delphi делать особо нечего. Можно, конечно, но - не надо. Delphi - объектно-ориентированный язык, поэтому в нем есть и повсеместно используются классы. Парадигма объектно-ориентированного программирования сама по себе подразумевает использование классов. Классы - краеугольный камень ООП и Delphi. Не нравятся классы - используй другой язык программирования. Вот только ООП, как показывает опыт, в большинстве случаев лучше процедурного программирования.

я пытался читать про классы,но там половина слов непонятные...может книга плохая

То есть, ты хочешь сказать, что в книге используются какие-то не такие слова? Английские? Или матерные?


brother   (2010-03-29 12:36:00) [9]

имхо, топик - развод ибо [2], а автору могу пожелать одного: удачи в программировании!


Вася   (2010-03-29 12:30:00) [10]

у меня в программе нету классов...тока tform который я динамически создаю...

я пытался читать про классы,но там половина слов непонятные...может книга плохая...=(
а метод - это вроде так функция внутри класса зовётся просто...

без классов совсем нельзя?они мне не нравятся что-то совсем...=\\


KSergey   (2010-03-29 12:28:00) [11]

Автор, почитайте вот тут
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


Метод   (2010-03-29 10:34:00) [12]

"Методу" при вызове передается скрытый параметр Self. Этим вызов "метода" отличается от вызова обычной "процедуры". Поэтому тебе компилятор и говорит, что "Несовместимые типы: 'указатель на метод и обычная процедура'". Используй метод какого-то класса (той же формы) вместо обычной процедуры, как в [1]. И вообще, почитай, что такое "метод" и чем он отличается от "процедуры".


brother   (2010-03-29 06:35:00) [13]

[2]


Вася   (2010-03-29 06:34:00) [14]

хм...

> указатель на процедуру 4 байта, а на метод класса "двойной" указатель в 8 байт...

не совсем понял "о чом тут ваще"(с), но получается что никак?((


brother   (2010-03-29 06:22:00) [15]

я тебе привел пример и спросил про [2]


Вася   (2010-03-29 06:21:00) [16]

м-м...не понял...а разве у меня не точно так же?


brother   (2010-03-29 06:20:00) [17]

зы. ты
> procedure mouse_down(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);

проверял? ;)


brother   (2010-03-29 06:18:00) [18]

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin

end;

значит:

> procedure mouse_down(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> begin
> // something //
> end;


Наверх

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