Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Загрузка данных из ini (http://forum.oszone.net/showthread.php?t=253766)

novashdima 11-02-2013 15:44 2087946

Загрузка данных из ini
 
Загружаю данные таким образом:
Код:

procedure TIniOptions.LoadSettings(Ini: TIniFile);
var chk, i: integer;
begin
  if Ini <> nil then
  begin
    if not Ini.SectionExists('TsSpinEdit')
    then chk := MessageDlg('Неверные данные!', mtError, [mbOk] , 0)
    else
      begin
        with MainForm do
        for I := 0 to ComponentCount - 1 do
          begin
            if Components[i] is TsSpinEdit
            then TsSpinEdit(Components[i]).Value := Ini.ReadInteger('TsSpinEdit', TsSpinEdit(Components[i]).Name, 0);
            if Components[i] is TsCheckBox
            then TsCheckBox(Components[i]).Checked := Ini.ReadBool('TsCheckBox', TsCheckBox(Components[i]).Name, False);
            if Components[i] is TsComboBox
            then TsComboBox(Components[i]).ItemIndex := Ini.ReadInteger('TsComboBox', TsComboBox(Components[i]).Name, 0);
          end;
      end;
  end;
end;

И все бы хорошо, да один компонент присваивает неправильное значение, при повторной загрузке данных из файла все норм.
Процедура обработки при изменении данных одна на все, поэтому такой баг должен был быть везде.
П.С. После загрузки данных на этом самом компоненте значение становится равным максимально возможному, причем такое возможно только если при вводе данных ввели значение больше максимального, тогда присваивается максимальному значению, но все равно странно...

Еще интересно, какое использовать диалоговое окно типа MessageDlg (с указанием типа сообщений и кнопок), но без возвращаемой кнопки (ShowMessage не подходит). Только мучаться с MessageBox что ли?

Любезный 11-02-2013 17:57 2088044

Сначала посмотри в отладчике или через ShowMessage, какое значение попадает в компонент из ини по факту. Ну а потом можно будет грешить либо на компонент, либо на ини.

novashdima 12-02-2013 18:12 2088846

Цитата:

Цитата Любезный
Сначала посмотри в отладчике или через ShowMessage, какое значение попадает в компонент из ини по факту. Ну а потом можно будет грешить либо на компонент, либо на ини. »

Посмотрел, данные правильные, вносятся те, что надо, но!!! при изменении каких-либо начальных данных у меня идет пересчет всех данных. Вот пришлось пересмотреть весь код, глаз зацепился за одну процедуру, подумал, что-то не так, посмотрел и увидел, что когда копипастил часть процедуры забыл видимо изменить кое-что и вот результат(

Но еще одна странность, после загрузки настроек Caption у главной формы пустой.

Любезный 12-02-2013 20:34 2088937

Отладчик в руки - и вперёд пошаговым прогоном.

opel431 13-02-2013 03:51 2089221

Цитата:

Цитата novashdima
Но еще одна странность, после загрузки настроек Caption у главной формы пустой. »

Не знаю....мне кажется, мало знать, что нужно выбрать "яйца" (is), нужно знать и какие (as).

if Components[i] is TsSpinEdit then
(Components[i] as TsSpinEdit).Value :=...

да и With следует применять, дабы не повторятся в префиксах - Ini.ReadInteger....

novashdima 13-02-2013 06:46 2089240

Цитата:

Цитата opel431
if Components[i] is TsSpinEdit then
(Components[i] as TsSpinEdit).Value :=... »

(Component[i] as TsSpinEdit).Value = TsSpinEdit(Components[i]).Value

Цитата:

Цитата opel431
да и With следует применять, дабы не повторятся в префиксах - Ini.ReadInteger.... »

я уже использую with для MainForm, поэтому со вторым траблы вроде бы будут

opel431 13-02-2013 08:45 2089265

Цитата:

Цитата novashdima
я уже использую with для MainForm, поэтому со вторым траблы вроде бы будут »

Это где вы вычитали?


Время: 10:15.

Время: 10:15.
© OSzone.net 2001-