![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Показывай код.
|
|
#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. |