У вас вызывается функция multilanguage, которая пытается обратиться к колонкам грида, которые еще не были созданы, например: frmServiceCen.tgList.Columns[0]
но колонки будут созданы только после заполнения, когда пользователь нажмет на кнопку frmServiceCen.bSearch
поэтому лучше сделать так
if ServicetgList = 0 then
begin
s := langIniG.ReadString('col','col0', 'ID');
s := s + ','+ langIniG.ReadString('col','col1', 'Оборудование');
s := s + ','+ langIniG.ReadString('col','col2', 'Производитель');
s := s + ','+ langIniG.ReadString('col','col3', 'Модель');
s := s + ','+ langIniG.ReadString('col','col4', 'Серийный номер');
s := s + ','+ langIniG.ReadString('col','col5', 'Дата приёма');
s := s + ','+ langIniG.ReadString('col','col6', 'Статус');
s := s + ','+ langIniG.ReadString('col','col7', 'Гарантийный');
s := s + ','+ langIniG.ReadString('col','col8', 'Только диагностика');
s := s + ','+ langIniG.ReadString('col','col9', 'СМС отправленно');
frmServiceCen.bSearch.dbListFieldsNames := s;
end;
имена колонок присваевается кнопке, т.к. именно кнопка в вашем случае является источником данных.
также вызовы функций
userTab;
multilanguage;
registrKey;
переместите в событие OnShow главной формы (frmLogin)
Dmitry.