![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте. Возникла проблема доступа.
Вот суть проблемы: ![]() Есть 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. |