Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.24;
Скачать: CL | DM;

Вниз

Вызов функции из функции   Найти похожие ветки 

 
sniknik ©   (2011-01-17 02:09) [40]

> Self-ом не являющийся.
или имеется в виду второй случай с Memo? ну так бысмысленным сделал его тот кто вручную составлял и составил неправильно, дал Mem-У Edit. ССЗБ.


 
Servy ©   (2011-01-17 02:33) [41]


> Ega23 ©   (17.01.11 01:10) [33]
> Он будет показывать ровно то, что должен показывать. Задачи,
>  чтобы это был полноценный TNotifyEvent не было.


Конечно, задача ведь была "сделайте мне как можно более неполноценный TNotifyEvent".


> sniknik ©   (17.01.11 02:09) [40]
> или имеется в виду второй случай с Memo? ну так бысмысленным
> сделал его тот кто вручную составлял и составил неправильно,
>  дал Mem-У Edit. ССЗБ.


Я правильно вас обоих понял: то, что явный параметр TNotifyEvent  - Sender - потерян и не доступен из процедуры, а неявный параметр - Self -  переименован в Sender не является ошибкой в коде [22], а, напротив, является отличным примером написания кода для начинающих? Тогда будет замечательно, если вы потрудитесь обосновать это нелепое с моей точки зрения утверждение.


 
Германн ©   (2011-01-17 02:36) [42]


> Германн ©   (17.01.11 01:58) [37]
>
>
> > Вообще-то, если решать задачу
>
> А нужно ли решать эту задачу в "Начинающим"?
> Да ещё и разводить теоретический спор на тему этой задачи?
>
> Сам сабж - бредовый. X-Y-Z
>


 
Servy ©   (2011-01-17 02:44) [43]


> Сам сабж - бредовый.


Да. Однако на обсуждаемую спорную ошибку в [22] это никак не влияет, негоже сделать вид, что там все окей, позволив возможным неопытным читателям этой ветки обмануться, не так ли?


 
Германн ©   (2011-01-17 03:16) [44]


> Да. Однако на обсуждаемую спорную ошибку в [22] это никак
> не влияет, негоже сделать вид, что там все окей, позволив
> возможным неопытным читателям этой ветки обмануться, не
> так ли?

Вы скачали пример по ссылке в Юрий Зотов ©   (16.01.11 20:08) [26]?
Вы его проверили? Он работает?

Однако, не стоит обсуждать тут пост [22], если у вас нет намерения "поспорить с ЮЗ".


 
Servy ©   (2011-01-17 03:38) [45]


> Вы скачали пример по ссылке в Юрий Зотов ©   (16.01.11 20:
> 08) [26]?
> Вы его проверили? Он работает?


Да, он работает. Как это подтверждает отсутствие в нем обсуждаемой ошибки, явно сформулированной мной в [41]?


> Однако, не стоит обсуждать тут пост [22], если у вас нет
> намерения "поспорить с ЮЗ".


Я не пониманию, исходя из чего единственным допустимым поводом обсуждения поста является намерение "поспорить с ЮЗ". Я против него в целом ничего не имею, все люди ошибаются. Другое дело, что тут почему-то появились люди, упорно утверждающие, что так и надо.


 
Leonid Troyanovsky ©   (2011-01-17 04:06) [46]


> Servy ©   (17.01.11 02:44) [43]

> Да. Однако на обсуждаемую спорную ошибку в [22] это никак
> не влияет, негоже сделать вид, что там все окей, позволив
> возможным неопытным читателям этой ветки обмануться, не
> так ли?

По ходу обсуждения я заметил не одну неточность в формулировках,
но не спешил их уточнять, бо поведение ТС к тому не располагало.
ЮЗ, IMHO, имел в этом случае право и  на умышленную неточность.

Ну, а так, конечно, да - все люди ошибаются, и указывать на ошибки
святое форумное дело.

--
Regards, LVT.


 
Сергей   (2011-01-17 04:29) [47]


> sniknik ©   (15.01.11 20:50) [17]
> замени  
>  EvChange.Code := @EvOnChange;
>  OnChange := TNotifyEvent(EvChange);
> на
>  OnChange := TNotifyEvent(OnGetMy); (сохраним переменную
> собственно в объекте)
> и все будет работать


Опять не то. Задача вызвать функции OnGetMy из функции MyFunc1, а не просто прописать её в OnChange.


> Юрий Зотов ©   (16.01.11 08:46) [20]
>
> А ответ на вопрос "как правильно осуществить вызов из примера
> в первом постинге" все же имеется.
>
> Отвечаю: правильно - никак.


Ничего. Все эти личностные оценки правильно или не правильно давайте оставим в стороне.


 
Германн ©   (2011-01-17 05:15) [48]


> Задача вызвать функции OnGetMy из функции MyFunc1, а не
> просто прописать её в OnChange.

А ТС продолжает настаивать на своём бреде. :(


 
Servy ©   (2011-01-17 05:45) [49]


> Опять не то. Задача вызвать функции OnGetMy из функции MyFunc1,
>  а не просто прописать её в OnChange.


Это невозможно. Указатели на локальные процедуры и функции не положено сохранять. Если вы попробуете скомпилировать следующий код:

procedure Test;

 procedure Local;
 begin
   ShowMessage("I am local");
 end;

var
 P: TProcedure;
begin
 P := Local;
end;


То увидите вполне закономерное сообщение об ошибке:

E2094 Local procedure/function "Local" assigned to procedure variable

Однако, операцию взятия адреса у локальных процедур разработчики компилятора почему-то не запретили (вероятно напрасно). Однако, при таком вызове (через сохраненный указатель) по вполне объективным причинам обращаться к локальным переменным (включая параметры, такие как OnGetMy) родительской функции вы не сможете.

Решение вам предлагалось еще в [15]:


> в данной конкретной ситуации способ простой, не использовать
> локальную (стековую) переменную при вызове ее в кода в другом
> месте. а сохранить ее где нибудь в доступном из обоих мест
> месте, например.
> (говорил же просто)


Если оно вас по каким-то причинам не устраивает, то, судя по всему, у задачи в вашей постановке решения нет (так как по постановке задачи нельзя отменить локальность функции, а жестокая реальность не дает обращаться к стековым переменным родительской функции, если дочерняя вызывается черт знает откуда).


 
sniknik ©   (2011-01-17 08:14) [50]

> Опять не то. Задача вызвать функции OnGetMy из функции MyFunc1, а не просто прописать её в OnChange.
тебе же объяснили причину, она локальная(/адрес), сделай ее глобальной и сможешь указать, и ее (а переменную сохранять рядом как в [4] например).

или опять не то? т.е. уперся в один, невозможный вариант, и "решаешь" его. а нужно решать задачу. а варианты менять, а лучше изначально использовать правильные.

... есть еще возможность ..., переходи на яву, хотя, нет, точно за нее не скажу, на яваскрипт, вот там точно, такое в порядке вещей. неважно где описана процедура ее можно назначить любому событию (там это даже используется сделать "типа объекта со своим списком переменных").


 
KSergey ©   (2011-01-17 08:53) [51]

> Сергей   (17.01.11 04:29) [47]
> Все эти личностные оценки правильно или не правильно давайте оставим в стороне.

Где здесь личностные оценки?!


 
Сергей   (2011-01-18 18:40) [52]


> Servy ©   (17.01.11 05:45) [49]
>
> > Опять не то. Задача вызвать функции OnGetMy из функции
> MyFunc1,
> >  а не просто прописать её в OnChange.
>
> Это невозможно. Указатели на локальные процедуры и функции
> не положено сохранять.


"Не положено" и "невозможно" - это разные вещи.


 
Плохиш ©   (2011-01-18 18:43) [53]


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

Разве в ява или яваскрипте есть вложенные функции?


 
sniknik ©   (2011-01-18 19:14) [54]

> Разве в ява или яваскрипте есть вложенные функции?
в яве не уверен, не писал на ней, а вот в яваскрипте... вот про что говорил
http://javascript.ru/basic/closure
думаю примеров там для ответа на этот вопрос достаточно.


 
DiamondShark ©   (2011-01-18 20:19) [55]


> Сергей   (18.01.11 18:40) [52]
> "Не положено" и "невозможно" - это разные вещи.

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

Так понятнее?

Отсюда следует, что для того, чтобы её-таки вызвать, тебе понадобится сделать захват и восстановление контекста.
Для захвата тебе понадобится какая-нибудь структура, которая будет жить не меньше указателя на функцию (а контроль над ним ты теряешь прямо вот не одходя от кассы, хе-хе).
А для восстановления тебе придётся проэмулировать стековый фрейм.

Вот простого надёжного решения ты не хочешь, а хитроподвыперднутое глюкалово ты хочешь.

Тебе больше делать нехер? Времени свободного много? Ну сходи с тёлками потуси.


 
Leonid Troyanovsky ©   (2011-01-18 22:22) [56]


> DiamondShark ©   (18.01.11 20:19) [55]

> Вот простого надёжного решения ты не хочешь, а хитроподвыперднутое
> глюкалово ты хочешь.

Так понятней.
Хорошо описано.

--
Regards, LVT.



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

Текущий архив: 2011.04.24;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.011 c
6-1236577141
kernel
2009-03-09 08:39
2011.04.24
Зависание IdHTTPProxyServer


15-1294349396
Юрий
2011-01-07 00:29
2011.04.24
С днем рождения ! 7 января 2011 пятница


15-1294985178
Медвежонок ХМЛ
2011-01-14 09:06
2011.04.24
УЭК


2-1295512726
Dennis I. Komarov
2011-01-20 11:38
2011.04.24
Архивация


2-1295032117
Сергей
2011-01-14 22:08
2011.04.24
Вызов функции из функции