![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свой обработчик для динамически созданного компонента [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;