|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Повторное открытие окон - ошибка Access Violation
Здравствуйте!
Тупая проблема - всё работает отлично, но если открыть окно, закрыть окно, затем нажать кнопку открывающую окно - ошибка Access Violation, то есть ошибка при попытке повторного открытия окна. Окно MDIChild, процедура закрытия окна caFree. Перед закрытием также прописано Dataset.Close (пробовал писать и FormDestroy и в FormClose). Создаётся окно в главной форме MDIForm так: fOkno := TfOkno.Create(self); Ничего сложного вроде нет. Но баг есть... из-за чего может быть?! Последний раз редактировалось delphicoding, 18.11.2011 в 16:18. |
#2
|
|||
|
|||
окно создаётся во время нажатия кнопки?
попробуй перед fOkno := TfOkno.Create(self); напиши fOkno.free; возможно при повторном открытии переменная fokno уже занята. |
#3
|
||||
|
||||
Мы программисты, а не гадалки. Давай код, посмотрим.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#4
|
|||
|
|||
Если код такой, то всё работает корректно, но есть ненужная возможность создать это окно два раза повторным кликом:
Код:
fOkno := TfOkno.Create(Application); fOkno.Show; Код:
ошибка: FreeAndNil(fOkno); (или fOkno.Free;) fOkno := TfOkno.Create(Application); (или Self) fOkno.Show; а так ничего не происходит при повторном нажатии, видимо переменная действительно не очистилась: if not Assigned(fOkno) then begin fOkno := TfOkno.Create(Application); fOkno.Show; end; Пробовал так, но это очевидно сразу же очищает окно после создания: fOkno := TfOkno.Create(Application); fOkno.Show; FreeAndNil(fOkno); Пробовал так, но опять ошибка: if Assigned(fOkno) then FreeAndNil(fOkno); (или fOkno.Free) fOkno := TfOkno.Create(Application); fOkno.Show; |
#5
|
||||
|
||||
Ставь обработчик на OnClose того окна, чтоб очищал переменную. Переменную, соответственно, сделай глобальной. Ну и тогда код, который
Код:
if not Assigned(fOkno) then begin fOkno := TfOkno.Create(Application); fOkno.Show; end; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
Цитата:
Последний раз редактировалось delphicoding, 05.12.2011 в 12:02. |
#7
|
|||
|
|||
Цитата:
|
#8
|
|||
|
|||
Напишите пример, пожалуйста...
|
#9
|
|||
|
|||
Решено - первый код вполне правильный и хорошо работает, не хватало только полного очищения/уничтожения переменной fOkno, для этого потребовалось всего-лишь дописать в OnClose строку fOkno:=nil; и всё, никаких извратов и ненужных конструкций.
|