Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.042 c
15-1156799946
VEG
2006-08-29 01:19
2006.09.17
Ваше лето


11-1132642153
MTsv DN
2005-11-22 09:49
2006.09.17
Удержание кнопки мыши и кнопки...


2-1156757712
stud
2006-08-28 13:35
2006.09.17
вопрос по action


8-1141368979
sergey2006
2006-03-03 09:56
2006.09.17
Использование directshow


2-1156406173
ceval
2006-08-24 11:56
2006.09.17
Подскажите как написать процедуру





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский