Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизIni Найти похожие ветки
← →
vain © (2006-08-28 11:12) [0]
procedure TForm1.SaveToIni;
begin
sif:= TIniFile.Create(ExtractFilePath(Application.ExeName)+"positions.ini");
section:= "window";
sif.WriteBool(section, "maximized", (Form1.WindowState=wsMaximized));
sif.WriteInteger(section, "width", Form1.Width);
sif.WriteInteger(section, "height", Form1.Height);
end;
procedure TForm1.ReadFromIni;
begin
sif:= TIniFile.Create(ExtractFilePath(Application.ExeName)+"positions.ini");
section:= "window";
If sif.ReadBool(section, "maximized", false)
Then Form1.WindowState:= wsMaximized
Else begin
Form1.Width:= sif.ReadInteger(section, "width", 735);
Form1.Height:= sif.ReadInteger(section, "height", 502);
end;
end;
Не работает, записывает width и height те значения, которые устанавливались не этапе конструированиея (не 735 и 502).
В maximized тоже записывает 0.
Ещё вопрос. Почему Form.FormDestroy выполняется дважды?
← →
Плохиш © (2006-08-28 11:18) [1]
> Не работает, записывает width и height те значения, которые
> устанавливались не этапе конструированиея
Form1.Width:= sif.ReadInteger(section, "width", 735);
Form1.Height:= sif.ReadInteger(section, "height", 502);
Вот поэтому и не работает.
> Ещё вопрос. Почему Form.FormDestroy выполняется дважды?
Потому что ошибка в программе.
← →
Dmitrij_K (2006-08-28 11:19) [2]
> Почему Form.FormDestroy выполняется дважды?
Ошибки в программе
sif.free по-твоему делать не надо?
← →
vain © (2006-08-28 11:25) [3]Да нет же.
Я посмотрел, если поставить brackpoint в Form1.formdestroy, то в watch"e form1.width и height показываются такими, какими я их сделал на этапе конструирования. //Form1.WindowState тоже
← →
vain © (2006-08-28 11:27) [4]
> sif.free по-твоему делать не надо?
Да делаю, просто скопировал только куски процедур, а не целиком.
> Ошибки в программе
Какие ошибки могут вызвать вызывание метода destroy два раза?
← →
Наиль © (2006-08-28 11:30) [5]Масса ошибок. К перечисленым добавлю:
> procedure TForm1.SaveToIni;
> begin
> sif:= TIniFile.Create(ExtractFilePath(Application.ExeName)+"positions.ini");
Если объект создаётся в методе и уничтожатся (должен) в методе, то sif должен (но не обязан), быть локальной переменной.
> sif.WriteInteger(section, "width", Form1.Width);
> sif.WriteInteger(section, "height", Form1.Height);
Старайся ни когда не использовать Form1 в тексте программы. Либо ни чего не пиши (Form1.Width -> Width), либо пиши self (Form1.Width -> self.Width).
А двойной дестрой возникает из-за того, что в программе есть Form1.Free или просто Free.
← →
Ega23 © (2006-08-28 11:30) [6]
> Какие ошибки могут вызвать вызывание метода destroy два
> раза?
Как это какие? Один дополнительный Create
← →
Dmitrij_K (2006-08-28 11:30) [7]
> Какие ошибки могут вызвать вызывание метода destroy два
> раза?
Например в OnDestroy вызвать метод Free формы
← →
Fay © (2006-08-28 11:31) [8]2 vain © (28.08.06 11:27) [4]
> Какие ошибки могут вызвать вызывание метода destroy два раза?
Прининьзячивание одного обработчика на несколько событий.
← →
Плохиш © (2006-08-28 11:31) [9]
> Какие ошибки могут вызвать вызывание метода destroy два
> раза?
Пути начинающего не желающего думать неисповедимы.
← →
vain © (2006-08-28 11:40) [10]
> Если объект создаётся в методе и уничтожатся (должен) в
> методе, то sif должен (но не обязан), быть локальной переменной.
Это я понимаю, просто var тоже в пост не скопировал.
>
> Старайся ни когда не использовать Form1 в тексте программы.
> Либо ни чего не пиши (Form1.Width -> Width), либо пиши
> self (Form1.Width -> self.Width).
Помогло. Спасибо. А почему не понимаю. Ведь у меня только и был экземпляр Form1?
← →
Ega23 © (2006-08-28 11:45) [11]
> Ведь у меня только и был экземпляр Form1?
В купе с постом о дважды-вызове деструктора лично я в этом очень сильно сомневаюсь.
← →
Наиль © (2006-08-28 12:00) [12]Из [11] следует, что Form1 создавался дважды.
Есть другой вариант. В следствии наличия в программе Free или Destroy Form1 уничтожается. Поэтому к моменту сохранения он может не существовать. А в сочетании с автоматическим уничтожением формы при закрытии, получается двойной дестрой.
← →
vain © (2006-08-28 12:04) [13]
> Наиль ©
Спасибо за дельные советы.
← →
Плохиш © (2006-08-28 12:08) [14]
> А почему не понимаю.
Потому что переменная Form1 никакого отношения к классу TForm1 не имеет и может указывать куда угодно. В особенности в момент автосоздания объекта формы в программе начинающего.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.098 c