|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
AccessViolation при обращении к процедуре из другой формы
Здравствуйте. Возникла проблема доступа.
Вот суть проблемы: Есть 2 формы: обычная - frm (модуль Main) и модальная - frm_fp (модуль FlightPoints). В форме frm_fp можно редактировать текстовый файл. Ее основная задача - пропарсить тектовый файл, в котором есть двумерный массив. Пример: Цитата:
Далее, эти значения присваются в массив FLIGHTS типа TFlights Код:
type TFlights = record index: Integer; title, distance, code: String; end; Массив объявлен в var глобально, до implementation Когда я в модальной форме заканчиваю редактировать, переменная FLIGHTS полностью корректна, содержит нужные значения. Процедура ParseFlightsFile, которая отвечает за заполнение FLIGHTS находится в форме frm_fp (модуль FlightPoints): Код:
for I := 0 to Length(Main.FLIGHTS)-1 do begin stl_FlightData := TStringList.Create; stl_FlightData.Text := StringReplace(stl_FlightsFile[i], '|', #13#10, [rfReplaceAll]); if stl_FlightData.Count = 4 then begin Main.FLIGHTS[i].index := StrToInt(stl_FlightData[0]); Main.FLIGHTS[i].title := stl_FlightData[1]; Main.FLIGHTS[i].distance := stl_FlightData[2]; Main.FLIGHTS[i].code := stl_FlightData[3]; imDone := true; end else begin ShowMessage('Неверные данные файла. Действие прервано'); end; stl_FlightData.Free; if imDone then begin imDone := false; continue; end else Application.Terminate; end; Код Код:
memo_flightsLog.Lines.Add( 'FLIGHTS[3]: ' + Main.FLIGHTS[3].title ); Цитата:
Данные о парсируемом файле сохранены в ini-файле и я их получаю при загрузке программы. Поэтому, заполнить массив FLIGHTS мне необходимо во время запуска программы. Поэтому в frm.onCreate я прописываю строку: Код:
frm_fp.ParseFlightsFile; Где я ошибся? В какую сторону рыть? Привожу код ParseFlightsFile: Код:
procedure Tfrm_flightPoints.ParseFlightsFile; var stl_FlightsFile, stl_FlightData: Tstringlist; I: Integer; imDone: Boolean; begin if FileExists(Main.FLIGHTS_FILE) then begin Main.PARSE_FLIGHTS := ''; SetLength(Main.FLIGHTS, 0); imDone := false; stl_FlightsFile := TStringList.Create; stl_FlightsFile.LoadFromFile(Main.FLIGHTS_FILE, TEncoding.UTF8); memo_flightsLog.Text := stl_FlightsFile.Text; // memo_flightsLog.Lines.Add( 'memo_flightsLog.Lines.Count: ' + IntToStr(memo_flightsLog.Lines.Count) ); SetLength(Main.FLIGHTS, stl_FlightsFile.Count); // memo_flightsLog.Lines.Add( 'Length(FLIGHTS): ' + IntToStr(Length(FLIGHTS)) ); for I := 0 to Length(Main.FLIGHTS)-1 do begin stl_FlightData := TStringList.Create; stl_FlightData.Text := StringReplace(stl_FlightsFile[i], '|', #13#10, [rfReplaceAll]); if stl_FlightData.Count = 4 then begin Main.FLIGHTS[i].index := StrToInt(stl_FlightData[0]); Main.FLIGHTS[i].title := stl_FlightData[1]; Main.FLIGHTS[i].distance := stl_FlightData[2]; Main.FLIGHTS[i].code := stl_FlightData[3]; imDone := true; end else begin ShowMessage('Неверные данные файла. Действие прервано'); end; stl_FlightData.Free; if imDone then begin imDone := false; continue; end else Application.Terminate; end; memo_flightsLog.Lines.Add( 'FLIGHTS[1]: ' + Main.FLIGHTS[1].title ); end; end; |
#2
|
|||
|
|||
форма "not Assigned" при запуске...
Извините... Последний раз редактировалось Admin, 17.11.2019 в 12:27. |