Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2013, 18:45   #1
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию Ошибка при записи в ini Lang файл

Код:
procedure TMain_Application.WriteChangeLang(LangSection: string);
var
  //âðåìåííàÿ ïåðåìåííàÿ äëÿ âûáîðêè âñåõ êîìïîíåíòîâ
  i, i1: Integer;
  //ñòðîêîâàÿ ïåðåìåííàÿ äëÿ ïîëó÷åíèÿ êàòàëîãà ñ exe
  ProgramPath: string;
begin
  //Ïîëó÷àåì êàòàëîã ãäå ëåæèò çàïóùåííûé exe
  ProgramPath := ExtractFileDir(Application.ExeName);
  //Ãàðàíòèðîâàííî óñòàíàâëèâàåì ïîñëåäíèé ñèìâîë
  if ProgramPath[Length(ProgramPath)] <> '\' then
    ProgramPath := ProgramPath + '\';
  //Ïîäãîòàâëèâàåì èíè ôàéë
  LangIniFile:=TIniFile.Create(ProgramPath+'Ðåäàêòîð Libx\lang.ini');
  LangIniFile.WriteString(LangSection, name, Caption);
  for i:=1 to ComponentCount do begin
    if Components[i-1].ClassType = TButton then
      LangIniFile.WriteString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TButton).Caption);
    if Components[i-1].ClassType = TLabel then
      LangIniFile.WriteString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TLabel).Caption);
    if Components[i-1].ClassType = TEdit then
      LangIniFile.WriteString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TEdit).Text);
    if Components[i-1].ClassType = TTabSheet then
      LangIniFile.WriteString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TTabSheet).Caption);
    if Components[i-1].ClassType = TRadioButton then
      LangIniFile.WriteString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TRadioButton).Caption);
    if Components[i-1].ClassType = TCheckListBox then
      if (Components[i-1] as TCheckListBox).Items.Count > 0 then
        For i1:=0 to (Components[i-1] as TCheckListBox).Items.Count-1 do
          LangIniFile.WriteString(LangSection,
            name+'-->'+Components[i-1].name+'-->Items-->Strings['+inttostr(i1)+']', (Components[i-1] as TCheckListBox).Items.Strings[i1]);
    LangIniFile.Free;
  end;
end;
Че я тук не так делаю почему ошибка системная



а в этом коде почемуто неет ошибок
Код:
procedure TMain_Application.ChangeLang(LangSection: string);
var
  //âðåìåííàÿ ïåðåìåííàÿ äëÿ âûáîðêè âñåõ êîìïîíåíòîâ
  i, i1: Integer;
  //ñòðîêîâàÿ ïåðåìåííàÿ äëÿ ïîëó÷åíèÿ êàòàëîãà ñ exe
  ProgramPath: string;
begin
  if ComponentCount <> 0 then begin
    //Ïîëó÷àåì êàòàëîã ãäå ëåæèò çàïóùåííûé exe
    ProgramPath := ExtractFileDir(Application.ExeName);
    //Ãàðàíòèðîâàííî óñòàíàâëèâàåì ïîñëåäíèé ñèìâîë
    if ProgramPath[Length(ProgramPath)] <> '\' then
      ProgramPath := ProgramPath + '\';
    //Ïîäãîòàâëèâàåì èíè ôàéë
    LangIniFile:=TIniFile.Create(ProgramPath+'Ðåäàêòîð Libx\lang.ini');
    Caption:=LangIniFile.ReadString(LangSection,name,Caption);
    for i:=1 to ComponentCount do begin
      if Components[i-1].ClassType = TButton then
        (Components[i-1] as TButton).Caption := LangIniFile.ReadString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TButton).Caption);
      if Components[i-1].ClassType = TLabel then
        (Components[i-1] as TLabel).Caption := LangIniFile.ReadString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TLabel).Caption);
      if Components[i-1].ClassType = TEdit then
        (Components[i-1] as TEdit).Text := LangIniFile.ReadString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TEdit).Text);
      if Components[i-1].ClassType = TTabSheet then
        (Components[i-1] as TTabSheet).Caption := LangIniFile.ReadString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TTabSheet).Caption);
      if Components[i-1].ClassType = TRadioButton then
        (Components[i-1] as TRadioButton).Caption := LangIniFile.ReadString(LangSection,
        name+'-->'+Components[i-1].name, (Components[i-1] as TRadioButton).Caption);
      if Components[i-1].ClassType = TCheckListBox then
        if (Components[i-1] as TCheckListBox).Items.Count > 0 then
          For i1:=0 to (Components[i-1] as TCheckListBox).Items.Count-1 do
            (Components[i-1] as TCheckListBox).Items.Strings[i1]:=LangIniFile.ReadString(LangSection,
            name+'-->'+Components[i-1].name+'-->Items-->Strings['+inttostr(i1)+']', (Components[i-1] as TCheckListBox).Items.Strings[i1]);
    end;
    LangIniFile.Free;
  end;
end;
Помогите пожалуйста
Alexandr17-10 вне форума Ответить с цитированием
Старый 13.08.2013, 19:09   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Посмотрите внимательно где у вас в первом коде находится строчка LangIniFile.Free;
northener вне форума Ответить с цитированием
Старый 13.08.2013, 19:27   #3
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Что бы такого не было, нужно учиться нормально форматировать код.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 13.08.2013, 19:28   #4
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию

Спасибо.
Блин пустяшная ошибка. А накрыла целую процедуру.
Alexandr17-10 вне форума Ответить с цитированием
Старый 13.08.2013, 20:25   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

так немного красивее:
Код:
uses TypInfo;
procedure TForm1.WriteChangeLang(const LangSection: string);
var
  LangIniFile:TIniFile;
  i, j: Integer;
  PropInfo:PPropInfo;
  Str:string;
  Strings:TStrings;
begin
  LangIniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'lang.ini');
  try
    LangIniFile.WriteString(LangSection, name, Caption);
    for i:=0 to ComponentCount-1 do
    begin
      PropInfo:=GetPropInfo(Components[i],'Caption',[tkString,tkLString, tkWString]);
      if PropInfo<>nil then
      begin
        Str:=GetStrProp(Components[i],PropInfo);
        LangIniFile.WriteString(LangSection,  name+'-->'+Components[i].name, Str);
        continue;
      end;

      PropInfo:=GetPropInfo(Components[i],'Text',[tkString,tkLString, tkWString]);
      if PropInfo<>nil then
      begin
        Str:=GetStrProp(Components[i],PropInfo);
        LangIniFile.WriteString(LangSection,  name+'-->'+Components[i].name, Str);
        continue;
      end;

      PropInfo:=GetPropInfo(Components[i],'Items',[tkClass]);
      if PropInfo<>nil then
      begin
        Strings:=TStrings(GetObjectProp(Components[i],PropInfo,TStrings));
        if Strings<>nil then
          for j:=0 to Strings.Count-1 do
            LangIniFile.WriteString(LangSection, name+'-->'+Components[i].name+'-->Items-->Strings['+inttostr(j)+']', Strings[j]);
        continue;
      end;
    end;
  finally
    LangIniFile.Free;
  end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 13.08.2013, 20:39   #6
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Мои пять копеек:

Код:
uses 
  TypInfo;
	
procedure TForm1.WriteChangeLang(const LangSection: String);
var
  i, j: Integer;
  PropInfo: PPropInfo;
  Str: String;
  Strings: TStrings;
begin
  with TIniFile.Create(ExtractFilePath(Application.ExeName) + 'language.ini') do
  begin
    try
      WriteString(LangSection, Name, Caption);
	
      for i:=0 to ComponentCount - 1 do
      begin
        PropInfo := GetPropInfo(Components[i], 'Caption', [tkString, tkLString, tkWString]);
	  
        if Assigned(PropInfo) then
        begin
          Str := GetStrProp(Components[i], PropInfo);
          WriteString(LangSection,  Name + '-->' + Components[i].Name, Str);
		
          Continue;
        end;

        PropInfo := GetPropInfo(Components[i], 'Text', [tkString, tkLString, tkWString]);
	  
        if Assigned(PropInfo) then
        begin
          Str := GetStrProp(Components[i], PropInfo);
          WriteString(LangSection,  Name + '-->' +Components[i].Name, Str);
		
          Continue;
        end;

        PropInfo := GetPropInfo(Components[i], 'Items', [tkClass]);
	  
        if Assigned(PropInfo) then
        begin
          Strings := TStrings(GetObjectProp(Components[i], PropInfo, TStrings));
		
          if Assigned(Strings) then
	  begin
            for j := 0 to Strings.Count - 1 do
	    begin
              WriteString(LangSection, Name + '-->' + Components[i].Name + '-->Items-->Strings[' + IntToStr(j) + ']', Strings[j]);
	    end;
	  end;
		
          Continue;
        end;
      end;
    finally
      Free;
    end;
  end;
end;
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка записи в ini файл Fashick Общие вопросы Delphi 1 29.03.2013 22:40
ошибка при записи в типизированный файл phasha Паскаль, Turbo Pascal, PascalABC.NET 5 18.04.2011 00:05
Ошибка при записи в файл txt Alex_Ku Помощь студентам 2 28.04.2007 12:15