Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Модальные формы и видимость глобальных переменных


leonidus ©   (2008-07-14 15:36:00) 

Столкнулся со странной проблемой, в главной форме приложения описана глобальная переменная: Photos_FileList:tstrings, она используется и в других формах проекта. Так вот если другая форма (например Unit2) вызвана из главной методом Show то я не могу обратиться к переменной Photos_FileList в модуле Unit2 т.к. получаю при этом AV, но стоит мне вызвать Unit2 через ShowModal как доступ появляется. Во-первых хотелось бы понять причину такого поведения, а во вторых меня просто не устраивает вызов через ShowModal, т.к. в этом случае вызывающая форма остается на экране а мне  надо ее закрыть и открыть Unit2.


Плохиш   (2008-07-14 16:44:00) [1]


> Поросенок Винни-Пух ©   (14.07.08 16:41) [11]
> Гораздо интереснее где написано Free

Для получения битой ссылки, Free писать не обязательно...


Поросенок Винни-Пух   (2008-07-14 16:44:00) [2]

То есть там у него так и есть как протелепатировано в [4]


Поросенок Винни-Пух   (2008-07-14 16:43:00) [3]

А вот кстати и разгадка:

а во вторых меня просто не устраивает вызов через ShowModal, т.к. в этом случае вызывающая форма остается на экране а мне  надо ее закрыть и открыть Unit2.


Поросенок Винни-Пух   (2008-07-14 16:41:00) [4]

Гораздо интереснее где написано Free


icWasya   (2008-07-14 16:40:00) [5]

а где написан
Photos_FileList:=TstringList.Create;


Anatoly Podgoretsky   (2008-07-14 16:12:00) [6]


> у тебя ошибка в программе

Одназначно, но не только там.


Плохиш   (2008-07-14 15:59:00) [7]

Хм, выделение не правильно сделал, да и пофик...


Плохиш   (2008-07-14 15:57:00) [8]


> leonidus   (14.07.08 15:54) [5]
> Плохиш, методPhotos_FileList. Freeвообще нигде не используется

Что ж не удивительно, что не программа, а сплошной глюкодром...

PS. У тебя ошибка в 17й строке.


Поросенок Винни-Пух   (2008-07-14 15:54:00) [9]

фик знает что там у тебя наваяно. вот одна из версий:

list := TstringList.Create;
Form2.Show;
list.free;

list := TstringList.Create;
Form2.ShowModal;
list.free;

В первом случае при обращении в Form2 к списку будет та ерунда, что и у тебя.
Угадай почему.


leonidus   (2008-07-14 15:54:00) [10]

Плохиш, метод Photos_FileList.Free вообще нигде не используется т.е. Photos_FileList вообще не уничтожается (это я только что заметил и уже исправил, но ошибка осталась.)

Правильный$Вася, не понимаю вас, я и так описал Photos_FileList как переменную в разделе var главной формы.

Поросенок Винни-Пух согласен что не должна такая чисто интерфейсная фишка как модальность давать такие серьезные вещи как AV...


Поросенок Винни-Пух   (2008-07-14 15:54:00) [11]

у тебя ошибка в программе


Правильный$Вася   (2008-07-14 15:42:00) [12]


>  главной форме приложения описана глобальная переменная:
>  Photos_FileList:tstrings

в форме нет переменных, есть свойства
если же ты опишешь это как переменную, тогда фавкт существования формы не будет иметь значения, и к этойпеременной можно юудет обращаться произвольно


Поросенок Винни-Пух   (2008-07-14 15:42:00) [13]

> т.к. получаю при этом AV

Это на 100000% никак не связано с модальностью/немодальностью


Плохиш   (2008-07-14 15:39:00) [14]


> т.к. получаю при этом AV


>  мне  надо ее закрыть и открыть Unit2.

Ну значит и не надо ум=ничтожать объект с адресом в Photos_FileList, при закрытии формы...


Наверх

Титульная страница Поиск, карта сайта Написать письмо