|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обращение к публичным переменным между формами
Однако, зравствуйте.
Имеются 2 формы и 1 модуль, в котором хранятся все процедуры и функции с общими переменными. Если на формах задействовать как-либо общие переменные, то, при их подключении, в самом приложении вылетит ошибка Access violation. Как правильно обращаться к ним? Код модуля Код:
unit Core; ---------------------------------- type Options = record X:string; Y:string[32]; end; ---------------------------------- type TCore = Class private public Conf: Options; ---------------------------------- Код формы: Код:
unit unti2; interface uses ......., Core; ---------------------------------- var Core : TCore; Form2: TForm2; implementation procedure TForm2.BitBtn1Click(Sender: TObject); var Ram:Options; begin Ram:=Core.Conf; end; ---------------------------------- Последний раз редактировалось IRorshachI, 17.11.2013 в 10:20. |
#2
|
||||
|
||||
Показывай код.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Коды выложил, проблема в том, что компилятор этот код пропускает, ошибка вылезает уже после запуска. Все переменные запоняются при запуске первой формы.
|
#4
|
||||
|
||||
Core не создан
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Core создается при запуске 1-й формы и все переменные читаются из текстового файла, на первой форме подобных ошибок нет и все переменные использвуются без проблем, но, видимо, при переходе на 2-ю форму с ними что-то происходит. Вопрос, как сохранять переменные при переходе с формы на форму не задействую текстовый файл?
|
#6
|
||||
|
||||
Цитата:
Вообще лучше не называть модули такими именами которыми можно потом спутать с другими идентификаторами (т.е. переменными, типами, функциями и т.п.). Мне нравится в конце имени модуля добавлять слово Unit - получится CoreUnit. Некоторые добавляют в начале имени модуля букву U - получается UCore. |
#7
|
|||
|
|||
Теперь ругается на отсутствие Core.dcu
|
#8
|
||||
|
||||
Цитата:
|
#9
|
|||
|
|||
Уже поправил) Но проблему это не решило.
|
#10
|
||||
|
||||
Цитата:
|
#11
|
|||
|
|||
Если убрать выделенную строку, то, при использовании публичной переменной, будет вылетать ошибка: Access Violation at adress..... Проблема в том, что данная процедура заново загружает все переменные с текстового файла, которые уже были загружены на 1-й форме.
Код:
procedure TForm2.FormShow(Sender: TObject); begin <<<<<<<<<<<<<<<<<<<< Core:=TCore.Create; < <<<<<<<<<<<<<<<<<<<< if Core.Conf.MaxMem='-Xmx256m' then ComboBox1.ItemIndex:=0 else if Core.Conf.MaxMem='-Xmx512m' then ComboBox1.ItemIndex:=1 else if Core.Conf.MaxMem='-Xmx1g' then ComboBox1.ItemIndex:=2 else if Core.Conf.MaxMem='-Xmx2g' then ComboBox1.ItemIndex:=3 else if Core.Conf.MaxMem='-Xmx4g' then ComboBox1.ItemIndex:=4; end; Последний раз редактировалось IRorshachI, 17.11.2013 в 13:23. |
#12
|
||||
|
||||
Цитата:
|
#13
|
|||
|
|||
Похоже, что он пропадает куда-то при переходе на 2-ю форму, мб, мне тебе исходники дать?
|
#14
|
||||
|
||||
Цитата:
|
#15
|
|||
|
|||
Скинул в ЛС
Последний раз редактировалось IRorshachI, 17.11.2013 в 17:35. |