Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2019, 10:15   #11
NNK_RTR
Пользователь
 
Регистрация: 14.08.2019
Сообщений: 16
По умолчанию

Цитата:
Она не хуже и не лучше. Она живет в ином пространстве имён нежели стандартное Дельфи приложение
Оставил бы сообщение без ответа, но Ваш статус на форуме "Профессионал", следовательно знаете, что говорите.
Предположил, что это функция API, забил в поисковик, но ничего, кроме Вашего сообщения выше, не нашел, следовательно, нет такой функции API, да если бы и была, разве не переопределил я ее в разделе interface? (к тому же, у меня процедура).
Моя процедура прекрасно видит объявленные в interface имена, иначе, откуда она знает о функциях DirectoryExists() и CreateDir(), да и саму функцию Application.Terminate?
К тому же она не только видит, но и изменяет объявленную мной глобальную переменную Bol типа boolean (о чем я писал в предыдущем сообщении).
И еще, что такое Регулярная процедура? Не помню, чтобы раньше мне попадался такой термин, а если и попадался, то я считал, что это обычная процедура, всегда существующая, внутреннее содержимой которой может изменяться, но суть оставаться прежней, просто кому-то захотелось назвать ее регулярной. Как армия, вооружение и личный состав может меняться, но армия остается армией до тех пор, пока есть государство, не будет государства - не будет и армии. Не будет армии, не будет существовать и регулярной процедуры (поэтому и не отложилось в памяти).

Мои рассуждения выше - суть полное непонимание видимости и локализации имен в процедурах и функциях? Подскажите, в чем я не прав, если нужно начинать с основ, то дайте ссылку на нужную литературу (на русском языке, желательно).
Имеющиеся у меня источники (Архангельский, Фаронов...) не противоречат моим рассуждениям. (про регулярные процедуры - просто вообще не рассказывают, а если рассказывают, то используют другой термин)
NNK_RTR вне форума Ответить с цитированием
Старый 02.09.2019, 11:18   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
И еще, что такое Регулярная процедура?
процедура, которая не является методом какого-то класса.
именно поэтому она никакого отношения к вашим формам не имеет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2019, 11:19   #13
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
Ваш статус на форуме "Профессионал"
он выдается за какое-то количество сообщений автоматически
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.09.2019, 11:39   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
н выдается за какое-то количество сообщений автоматически
это так.
но, тем не менее, northener профессионал очень высокого уровня.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2019, 18:38   #15
NNK_RTR
Пользователь
 
Регистрация: 14.08.2019
Сообщений: 16
По умолчанию

Спасибо Serge_Bliznykov.
Объяснил все легко и просто!
Регулярная функция существует вне всяких армий, как, скажем закон ома - если есть напряжение и сопротивление, то ток можно вычислить по закону ома.
И все же, регулярные функции пишутся в некотором модуле (а может и нет?) и все известные модулю имена известны и функции. Во всех случаях, написанная мною, теперь я могу гордо сказать регулярная процедура, точно видит все имена, которые определены в модулях предложения uses. Больше того, я могу программно щелкнуть по кнопке, принадлежащей некоторой форме, если эта форма включена в предложение uses, то есть, использовать метод класса.
Откликнитесь, если я опять не правильно понял и гоню пургу
С уважением, Николай
NNK_RTR вне форума Ответить с цитированием
Старый 02.09.2019, 19:20   #16
NNK_RTR
Пользователь
 
Регистрация: 14.08.2019
Сообщений: 16
По умолчанию

И все же, вопрос был: "Почему сначала завершается тело вызывающей процедуры и лишь затем завершается приложение"
Сейчас мне это интересно не в практических целях, а в чисто познавательных.
Почему нарушается последовательность действий? Причем здесь регулярная процедура? Если объявить эту процедуру как метод класса (формы), то последовательность действий не будет нарушаться?
Ответите: "Возьми и объяви". Попробую конечно, но каков бы не был результат объяснить (самому себе) не смогу.
Интересно, такое поведение возможно только если требуется закрыть приложение, или и в других случаях? Не могут ли возникать другие, не столь заметные ошибки? Я довольно часто вызываю из регулярных функций другие процедуры, как регулярные процедуры, так и методы, причем цепочка может быть довольно длинной. Ошибок не замечал, но могут ли они быть в принципе. Надо ли выполнять некоторые действия, чтобы избежать подобных ошибок.
NNK_RTR вне форума Ответить с цитированием
Старый 03.09.2019, 01:45   #17
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
И все же, регулярные функции пишутся в некотором модуле (а может и нет?) и все известные модулю имена известны и функции.
Отнюдь нет. У каждого имени есть своя область видимости. Регулярная функция прекрасно видит все переменные описанные в самом модуле в секциях interface и implementation. И для обращения к таким переменным ей достаточно только имени, ибо и у процедуры и у переменных одна и та же фамилия. Но поля формы описанной в этом модуле имеют "другую фамилию", а именно ссылку на экземпляр этой формы, который будет создан в realtime. Компилятор никак не может на этапе компиляции знать эту ссылку хотя бы потому, что экземпляров некоей конкретной формы может быть более чем один. В этом кстати и есть главная разница между переменными модуля и полями формы. Переменные модуля всегда имеют адреса, которые известны на этапе компиляции, в отличие от полей формы.

Последний раз редактировалось northener; 03.09.2019 в 02:14.
northener вне форума Ответить с цитированием
Старый 03.09.2019, 01:58   #18
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
Почему нарушается последовательность действий?
Последовательность действий никак не нарушается. Просто вам стоит прочитать про "механизм сообщений" в Windows. Дело в том, что метод TForm.Close отнюдь не вызывает сразу "закрытия формы". Метод TForm.Close всего лишь помещает в очередь сообщений окна данной формы сообщение WM_CLOSE методом PostMessage. После чего выполнение данной процедуры продолжается пока она не завершится. После её завершения ОС Windows сама решит когда нужно/стоит обработать/дать время окну для обработки этого сообщения.
northener вне форума Ответить с цитированием
Старый 03.09.2019, 02:12   #19
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от NNK_RTR Посмотреть сообщение
В вопросе у меня есть строка "Пробовал все функции по отдельности и все вместе"
Кстати советую вам сделать CheckAndCreateFolder функцией, а не процедурой.
northener вне форума Ответить с цитированием
Старый 03.09.2019, 11:23   #20
NNK_RTR
Пользователь
 
Регистрация: 14.08.2019
Сообщений: 16
По умолчанию

Спасибо!
Сам же не так давно разбирал в ollydbg закрытие приложение и прекрасно помню, что посылалось сообщение. (Windows вообще общается с приложениями сообщениями, а может и между собственными модулями, так, чтобы никто не слышал, тоже, в отличии от DOS, где вызывались прерывания)
Процедура или функция? - конечно функция. В данном случае она будет работать гораздо быстрей, поскольку в теле функции не надо будет изменять глобальную переменную, а это несколько строк кода ассемблера. В сообщениях я пишу "процедура", только чтобы не потерять связь с предыдущими сообщениями.
И еще вопрос, раз пошла такая пьянка (халява), для Вас ответить - раз плюнуть, а мне ворошить интернет...
Вопрос чисто познавательный
У меня написан обработчик события OnClose - предлагает сохранить работу, очищает динамически выделенную память...
Если закрывать приложение FormClose, то обработчик срабатывает, а если Application.Terminate - то нет. В то же время я откуда-то зная, что Application.Terminate посылает сообщение WM_CLOSE всем формам приложения.
Почему не срабатывает обработчик?
NNK_RTR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как закрыть соединение с радио Михаил Юрьевич Общие вопросы Delphi 0 03.04.2009 19:54
Закрыть чужое приложение Михаил Юрьевич Общие вопросы Delphi 3 28.03.2009 21:26
Как изменить своё имя? Манжосов Денис :) О форуме и сайтах клуба 11 22.07.2008 11:16
Своё окно в трее Altera Общие вопросы Delphi 10 02.07.2008 10:17
как закрыть программу? Alar Общие вопросы Delphi 0 29.10.2006 20:22