Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.11.2019, 16:38
VolodinAS VolodinAS вне форума
Прохожий
 
Регистрация: 16.07.2017
Сообщения: 23
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию AccessViolation при обращении к процедуре из другой формы

Здравствуйте. Возникла проблема доступа.
Вот суть проблемы:


Есть 2 формы: обычная - frm (модуль Main) и модальная - frm_fp (модуль FlightPoints).

В форме frm_fp можно редактировать текстовый файл. Ее основная задача - пропарсить тектовый файл, в котором есть двумерный массив. Пример:
Цитата:
line1_field1|line1_field2|line1_field3
line2_field1|line2_field2|line2_field3
...
lineN_field1|lineN_field2|lineN_field3

Далее, эти значения присваются в массив 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 );
даёт лог
Цитата:
FLIGHTS[3]: Диван

Данные о парсируемом файле сохранены в ini-файле и я их получаю при загрузке программы. Поэтому, заполнить массив FLIGHTS мне необходимо во время запуска программы. Поэтому в frm.onCreate я прописываю строку:
Код:
frm_fp.ParseFlightsFile;
Но при запуске программы, получаю ошибку Access Violation:


Где я ошибся? В какую сторону рыть?

Привожу код 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  
Старый 16.11.2019, 16:41
VolodinAS VolodinAS вне форума
Прохожий
 
Регистрация: 16.07.2017
Сообщения: 23
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

форма "not Assigned" при запуске...

Извините...

Последний раз редактировалось Admin, 17.11.2019 в 12:27.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter