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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2010, 20:25   #11
Яр|/||< (^_^)
LosYear
Форумчанин
 
Аватар для Яр|/||< (^_^)
 
Регистрация: 19.06.2009
Сообщений: 695
По умолчанию

Неа вы должны считать это всё куда нибудь в i. А потом сделать ветвление(if). А там делать типа есть i=0 то Form1.PageControl1.TabPosition:=tpT op. Ну или через case
Яр|/||< (^_^) вне форума Ответить с цитированием
Старый 02.05.2010, 20:33   #12
DimOn4Ik
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 206
По умолчанию

Спасибо,я принцип понял,но если не сложно покажите пожалуйста демо..
DimOn4Ik вне форума Ответить с цитированием
Старый 02.05.2010, 20:42   #13
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Вот демка: Ini.rar
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 02.05.2010, 21:02   #14
DimOn4Ik
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 206
По умолчанию

спасибо огромное!

Подскажите пожалуйста, как правильно работать с ini.free; ?

Писать только при закрытии формы или в каждой процедуре где работал с ini файлом?
Так как очень много форм и процедур где работают с ini файлом..

Последний раз редактировалось Stilet; 03.05.2010 в 16:42.
DimOn4Ik вне форума Ответить с цитированием
Старый 03.05.2010, 16:45   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Метод Free для INIFiles не только закрывает файл но и освобождает объект.
Так что если ты его при каждом чихе будешь использовать у тебя либо упадет программа при очередном обращении в ИНИ (Потому что сам обьект уже не существует) либо придется каждый раз создавать заново этот обьект, что не есть гут.
Запомни - как правило Create вызывают в самом начале работы программы, а Free в самом конце. В твоей ситуации ни в коем случае не стоит делать этого в каждой процедуре.
Цитата:
Так как очень много форм и процедур где работают с ini файлом..
Тоже мне проблема. Вынеси его в отдельный модуль а этот модуль применяй во всех формах, тогда и будут они работатть с одним и тем же компонентом.
При этом создавай INI в разделе модуля Initialization а освобождай в разделе finalization - и все будет лепше чем гут:
Для примера:
Код:
initialization
 reg:=TRegistry.Create;
 reg.RootKey:=HKEY_CURRENT_USER;
...
finalization
 reg.Free;
 ini.free;
end.
I'm learning to live...

Последний раз редактировалось Stilet; 03.05.2010 в 16:47.
Stilet вне форума Ответить с цитированием
Старый 03.05.2010, 16:48   #16
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

вот так..
Код:
procedure SaveSettings(); //Выносим соохранение в свою процедуру...
var
sDir:string; //переменная где будет храниться путь до папки с вашим exe
ini:TiniFile; //переменная типа INI
begin
try // начала блока исключения
GetDir(0,sDir); //получаем папку программы
ini:=TiniFile.Create(sDir+'Settings.ini'); //создаём файл намтроек рядом с exe
тут ваш код... захранения настроек...
finally 
ini.Free; //после finally в в блоке try..finally..end; код выполнится независимо от обстоятельств. ini.free освободит память..
end; //закрываем блок try..finally
end; //завершаем процедуру..

Procedure TForm1.OnDestroy(Sender: TObject);
begin
SaveSettings; //при уничтожении формы вызывается наша процедура сохранения..
end;
Человек_Борща вне форума Ответить с цитированием
Старый 03.05.2010, 16:53   #17
DimOn4Ik
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 206
По умолчанию

Спасибо! Подскажите где можно почитать про модули ? Так как с созданием модулей не знаком..

А можно так?

в Form2 подключил Form1

вот что в Form2..

Цитата:
uses form1;

......

Question.Caption:=ini.ReadString('f orgotpassword','question','');
и после закрытия формы "Form1" воспользовавшись ini.free это будет относится к Form2?

Последний раз редактировалось DimOn4Ik; 03.05.2010 в 17:39.
DimOn4Ik вне форума Ответить с цитированием
Старый 03.05.2010, 17:51   #18
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

все просто.. у нас есть 2 формы.. Form1 и Form2 ...
чтобы небыло ACCES VIOLATION при запуске/завершении программы.. делаем так:
Открывам DPR (Project-View Source)..
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
смотрим какая из форм последняя...

идем на эту форму и там для Create создаем загрузку настроек для программы..

так же в той же форме делаем и для destroy...

вот пример в аттаче.. там 2 исходника одного и того же..
в 1-ом показано как надо делать, во втором как не надо..
комментариями все пояснено...
Вложения
Тип файла: zip Ini Work by me.zip (397.6 Кб, 9 просмотров)
Человек_Борща вне форума Ответить с цитированием
Старый 03.05.2010, 17:55   #19
DimOn4Ik
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 206
По умолчанию

Спасибо огромное! Буду разбираться..

Посмотрел примеры..Но у меня совсем не так..У вас работа с ini только во второй форме а у меня и в первой и во второй..

во второй форме я не подключал заново модуль IniFile так как подключил первую форму.. И интересует вопрос после закрытия первой формы ini.free будет работать,а вот и для второй формы ? или для Form2 тоже после события OnClose писать ini.free ? смогу я работать с первой формой?

(извините , объяснить пытался как мог )

Последний раз редактировалось DimOn4Ik; 03.05.2010 в 18:09.
DimOn4Ik вне форума Ответить с цитированием
Старый 03.05.2010, 18:37   #20
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Тема такая:
Project-Viev Source...
смотрим какая Форма создается последней:
Код:
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
Form2.. значит.. она создается последней.. и уничтожается последней...
значит что если все настройки всех форм писать в form2 то при закрытии программы все настройки будут передены в Form2 с других форм и успешно будут записаны в ini.

С загрузкой тоже самое..
только form2 создасться последней и по этому сможет передать настройки из ini на все уже созданные формы..


Писать загрузку настрек на каждой форме это бред...

мож стукнуть в аську, помогу.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
INI файл! Stranger333 Помощь студентам 5 14.03.2010 19:07
Ini файл Baaandit Общие вопросы Delphi 8 23.11.2009 14:30
ini файл cheef Общие вопросы Delphi 5 28.04.2009 07:36
ini Файл Volkogriz Общие вопросы Delphi 1 12.11.2008 13:44
ini файл Simply-Art Общие вопросы Delphi 3 17.06.2007 14:43