9 / 9 / 12
Регистрация: 17.01.2018
Сообщений: 281
|
|
1 | |
RAD XE3+ Как уничтожать динамические объекты и вообще объекты, если это необходимо сделать в их процедурах?27.05.2018, 22:23. Показов 4001. Ответов 21
Метки нет (Все метки)
Создать отдельную процедуру CloseObject(Object: TObject) и вызывать ее в конце процедуры или так тоже нельзя? А то бесят эти access violation, то их нет, то потом появляются и хрен поймешь откуда, а потом оказывается что в процедуре удаляется объект, которому принадлежит эта процедура.
0
|
27.05.2018, 22:23 | |
Ответы с готовыми решениями:
21
Нужно ли уничтожать объекты после их использования? Как сделать, чтобы объекты не выделялись, если на них кликнуть мышкой? как можно сделать это? если вообще возможно (не задача) Как сохранить динамические объекты после завершения программы |
Житель Земли
|
|
27.05.2018, 22:29 | 2 |
если объекты "необходимо" удалять в их собственных методах, то это означает - никудышний алгоритм и конструкция программы. никогда так не делай
выше написал уже а по поводу "оказывается" - ржунимагу! ты же пограммист, ты писал эту процедуру, как это может быть для тебя неожиданностью?!
0
|
9 / 9 / 12
Регистрация: 17.01.2018
Сообщений: 281
|
|
27.05.2018, 22:36 [ТС] | 3 |
DenNik, и как мне интересно, к примеру, удалить форму по нажатию кнопки (в моем случае, это кнопка продолжить главного меню) или кнопку по нажатию на нее (после нажатия кнопки "Начать игру" она благополучна должна отправиться на небеса и без всяких отголосков в виде этих тупых ошибок access violation)? Это логично в принципе и здравому смыслу не противоречит.
DenNik, ну я забыл, что из-за этого могут быть ошибки, вот и получилось так.
0
|
пофигист широкого профиля
4755 / 3190 / 861
Регистрация: 15.07.2013
Сообщений: 18,467
|
|
28.05.2018, 02:18 | 5 |
WarlikeLaux, если бы вы привели ваш проблемный код, было проще указать вам на ошибки и объяснить почему этот код ошибочный.
Ну а в качестве бонуса, могу сообщить вам, что есть нормальный вариант уничтожения компонента из его собственного метода. PostMessage его владельцу.
0
|
пофигист широкого профиля
4755 / 3190 / 861
Регистрация: 15.07.2013
Сообщений: 18,467
|
|
28.05.2018, 02:50 | 7 |
Да это сплошь и рядом у новичков.
См. Это классический пример "как нельзя удалять компоненты".
0
|
28.05.2018, 06:58 | 9 | ||||||||||
Сообщение было отмечено WarlikeLaux как решение
Решение
для совершения отложенных действий исторически есть три метода
первый метод - родной для delphi-программистов завести специально отдельный таймер и в обработчик ему положить то что нужно на самом деле это скрытый второй метод, родной для windows, (на самом деле тоже для делфи, т.к. там многое так работает) это послать свое сообщение через post_message(UM_MY_MESSAGE222,0,0,0) своему окну, и в обработчике этого сообщения сделать то что нужно. но таймер это тоже всего лишь отбработчик сообщений WM_TIMER поэтому я и говорю, что это один и тот же вариант и третий вариант воспользоваться запуском отдельного потока только лишь для того, чтобы в нем через синхронизацию, выполнить ваше действие ))) в современных версиях
в обработчике OnClose нужно написать
нужно понимать, что все переменные кроме integer, boolean, других примитивных типов, это ссылки поэтому переменная Form1 при создании формы это ссылка на область памяти, где лежит объект формы можно сделать 100 переменных еще, и всем присвоить Form1 и все они будут тоже указывать на эту область Если теперь мы разрушим форму, но область-то мы разрушить не можем, поэтому все ссылки так и будут указывать на то место где ваша форма была. поэтому обращение к любой из этих переменных либо даст вам AV если эта память еще свободна, либо испортит другие данные, которые уже могли там поселиться Еще раз. Разрушение объекта ничего не делает с самими переменными! Поэтому обычно для получения комбо)) вызывают не F.Free а FreeAndNil(F) чтобы в переменную записать NIL
0
|
пофигист широкого профиля
4755 / 3190 / 861
Регистрация: 15.07.2013
Сообщений: 18,467
|
|
28.05.2018, 11:58 | 10 |
0
|
9 / 9 / 12
Регистрация: 17.01.2018
Сообщений: 281
|
|
28.05.2018, 15:44 [ТС] | 11 |
Всем спасибо за помощь, решил, что буду использовать PostMessage!)
0
|
9 / 9 / 12
Регистрация: 17.01.2018
Сообщений: 281
|
||||||
28.05.2018, 15:58 [ТС] | 13 | |||||
krapotkin, неа, я разобрался)
0
|
пофигист широкого профиля
4755 / 3190 / 861
Регистрация: 15.07.2013
Сообщений: 18,467
|
|
29.05.2018, 03:02 | 15 |
0
|
Житель Земли
|
||||||
29.05.2018, 09:35 | 16 | |||||
я хренею, господа. пардоньте мой французский!
WarlikeLaux, ты б хотя бы показал свой изначальный код, который приводил к возникновению ошибки! почему у меня код
WarlikeLaux, ты сделал вброс, все тебе поверили на слово и кинулись вместе с тобой решать задачу о XYZ!
0
|
29.05.2018, 10:17 | 19 |
тут не согласен
я всегда подтираю за собой созданные компоненты правда в основном это фреймы а создаю их всегда динамически но очень редко объект уничтожает себя сам. точнее, никогда, кроме TThread.
0
|
Житель Земли
|
|||||||||||
29.05.2018, 10:29 | 20 | ||||||||||
я это и имел в виду )
а по поводу "сам себя". опять же пример с кнопкой. нажатие на кнопку ведь не приводит к выполнению метода кнопки. выполняется ведь метод формы. кнопка просто инициирует его выполнение. и поэтому вопрос
Добавлено через 28 секунд Button1Click - это же метод формы Добавлено через 1 минуту почему, елсли я напишу
0
|
29.05.2018, 10:29 | |
29.05.2018, 10:29 | |
Помогаю со студенческими работами здесь
20
Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? Как обменять два элемента массива местами если эти два элемента это объекты? Динамические объекты Динамические объекты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |