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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.005 c
15-1294926003
12
2011-01-13 16:40
2011.04.24
EhLib v3.6. Нормально работает?


15-1294577449
MrHitman_47
2011-01-09 15:50
2011.04.24
Сайт-клиент->Программа-сервер?


15-1294991323
Антон Т.
2011-01-14 10:48
2011.04.24
Как сделать рассылку?


15-1294499183
RWolf
2011-01-08 18:06
2011.04.24
GhostDoc для Delphi


15-1292834915
12
2010-12-20 11:48
2011.04.24
Как существует Антиматерия or Где хранить всепрожигающую киcлоту?





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