![]() |
|
|
![]()
|
|
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Как сохранять настройки в Ini файл и читать их я знаю. Проблема в другом:
На Form2 навешаны CheckBox'ы. При нажатии на кнопку Ok, если включены определённые CheckBox'ы, идёт выполнение функции и запись настроек в Ini. Затем я выхожу из программы, и запускаю её заново. Загружается Form1. В функции FormCreate есть Form2->CheckBox1->Checked = IniSettings->ReadBool("Settings","Autorun", false); Form2->ButtonApplyClick(Sender); Вроде бы CheckBox1 на форме Form2 должен быть с галочкой или без (как показано в настройках), а нет, выскакивает ошибка при загрузке программы с выделением строки Form2->CheckBox1->Checked = IniSettings->ReadBool("Settings","Autorun", false); |
|||
|
||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: нет Всего: 2 |
Ну во-первых в событии FormCreate Form1 Form2 скорее всего еще не созданна
Во-вторых есть компанентка (точнее целый пакет компанент) storage library, каторая автоматически все это делает сама. кликается по компаненте, открывается список со всемы компанентами, лежащими рядом, и ихними пропертями. ставих галочку на нужном проперти и он автоматически загружается и выгружается. не требуется ни одной строчки кода. Storage Library Это сообщение отредактировал(а) Ivan. - 2.12.2007, 20:24 -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Компонент Storage Library, как я понял, подходит только к Delphi, и притом он платный.
Но есть ли всё-таки решить проблему с помощью создания главной формы? |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Может попробовать сохранить значения во временные переменные(которые потом удалить), а потом в OnCreate для Form2 присвоить значения из переменных?
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Почему это всё не запихнуть в OnCreate второй формы? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
ksili возможно некоторые настройки нужно применить к Form1.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Что значит "применить к Form1"?
Form1->.... можно написать и из второй формы -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Ну т.е. до того как будет создана Form2, к Form1 нужно применить какие-либо настройки (может графические или ещё какие, например доступность кнопки, размер или положение формы).
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Она что там полчаса создается? Создалась - а потом уже и применить можно. Или вообще изменить порядок создания форм, сначала Form2, а потом Form1
Файл проекта project1.cpp:
Ну или в настройках проекта изменить последовательность Это сообщение отредактировал(а) ksili - 3.12.2007, 10:22 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
А почему, код отоносящийся к настройке Form2, не выполнять там где этому коду самое место? А именно: тело конструктора TForm2.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
artsb был прав. Настройки сначало надо применить к Form1. Например цвет фона, поверх всех окон и др., следуя из Form2. Если вначале попытаться создавать Form2, а затем Form1, то полетят настройки относящиеся к Form1 (т.к. она должна создаваться первой).
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
те настройки, которые относятся к первой форме делай в ее конструкторе, а те которые к 2-й в ее конструкторе. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
ksili правильно пишет.
Можно же сначала создать Form2 и в OnCreate считать настройки из файла, ну и по отмечать галочки напрмер или ещё что, но форму не отображать. Потом при создании Form1 считать настройки из Form2 и отобразить Form1. Я правильно тебя понял ksili? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Скажите, если я вставлю
То сначала у меня будет создаваться Form2, как не создавая дополнительных меню, мне автоматически создавать Form1, а Form2 закрывать. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
поменяв порядок создания форм ты сделаешь Form2 главной формой приложения. Не надо ничего менять в созданиях форм. Просто не надо пихать инициализацию настроек формы 2 в создание формы 1. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Form2 вообще можно создать сначала невидимой, если уж так надо.
А вообще насколько я понял настройка одной формы не зависит о другой, а просто настройка зависит от содержимого ini-файла, а читается он в одной из форм. Надо читать его в первой создаваемой форме. А к настройке каждой формы применять при каждой (или при первой) её визуализации - событие OnShow -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Это-то понятно Fazil6, что главной формой будет теперь Form2. Но у меня на Form2 висит только менюшка с настройками, а всё остальное на Form1. Если я буду создавать сначала Form2, то я никак не смогу вернуться в Form1 без дополнительной менюшки, а нужно чтобы показывалась Form1.
Это сообщение отредактировал(а) flintstone - 3.12.2007, 13:03 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
||||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Мешает то, что в главной форме надо загружать параметры, которые показаны на Form2.
|
|||
|
||||
| Sharkfire |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Я решаю проблему так....
Я создал класс TOptions и в нём описал все нужные мне переменные, и сделал метод Save & Load. Описал переменную TOptions * Options в хедере главной формы. И получил к ней досутп из втрой формы. Вот последовательность вызова: В конструкторе главной формы вызваю конструктор класа, вызываю метод Лоад, в конструкторе дочерней формы, анализирую переменные класса (Form1->Options->...) |
|||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Попробую Sharkfire. Мне тут тоже подсказали, создать сначала какие-либо глобальные переменные, а потом к ним обратиться через Form2. Чем-то похоже на твой вариант.
|
|||
|
||||
| flintstone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.10.2007 Репутация: нет Всего: нет |
Вот ещё один способ, может кому пригодится
Только это для каждого CheckBox'а надо писать новый if. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Исчо раз говорю, эти параметры только показаны на Form2, а существуют они и вне её! в ini-файле -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: нет Всего: 2 |
Можно выполнять инициализацию дополнительных параметров не в OnCreate, а OnShow. к тому моменту уже все создано. Можно в таймере или в Idle проверять Showing, после чего инициализировать.
У меня есть старая версия Storage, ни какой лицензии с меня не требовала и работает уже несколько лет без проблем. Она подходит и к С++ (Builder 6) -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Сколько шуму из ничего. Неужели нельзя просто использовать приницип: любая форма самодостаточна и может сама прочитать свои настройки. Соответственно код по чтению настроек и инициализации настроек разместить в конструкторах.
И еще раз для всех, использующих OnCreate: использование OnCreate - это дельфинизм. OnCreate введен в только потому, что в Delphi отсутствует такое понятие, как конструктор. В С++Builder предпочтительнее использовать для этих целей тело конструктора, о чем в хелпе недвусмысленно указано разработчиками Borland Добавлено через 4 минуты и 20 секунд
А зачем загружать в главной форме то, что используется Form2 ? Ну а если даже частично Form2 и Form1 использует одни и теже параметры, то что это меняет. Почему их нельзя загрузить дважды? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |