Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция(и) ввода\вывода в файл 
V
    Опции темы
Noman
Дата 21.4.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



 Доброго времени суток.

 Я в C++ начинающий, и если мой вопрос покажется совсем глупым, сильно не пинайте.

 Я пишу программку, которая закрывает определенные процессы и отправляет копм в спящи режим. В главной форме имеется кнопка настроек на другую форму - где есть 5 полей ввода (Edit), чекбокс (Игнорировать наличие выгруженных приложений) и кнопки Ок и Отмена (BitBtn). Так вот, вопрос в следующем, как мне отправить все данные из полей Edit  и переменную о состоянии чекбокса в *.ini файл, и как соответственно его прочесть в первой форме?
 И еще вопрос, можно ли сделать так, чтобы названия процессов можно было вводить руками, а можно выбрать через winapi?

Заранее благодарен.
PM MAIL WWW ICQ   Вверх
Klin
Дата 21.4.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Что-то много вопрос, отвечу на основной (отправка информации). Я бы сделал так:
Код

 Memo1->Lines->Add(Edit1->Text);
 Memo1->Lines->Add(Edit2->Text);
 Memo1->Lines->Add(Edit3->Text); 
 Memo1->Lines->Add(Edit4->Text);
 Memo1->Lines->Add(Edit5->Text);
 Memo1->Lines->SaveToFile("data.ini");



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Klin
Дата 21.4.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(Noman @  21.4.2007,  15:59 Найти цитируемый пост)
И еще вопрос, можно ли сделать так, чтобы названия процессов можно было вводить руками, а можно выбрать через winapi?

немного не понял  smile 
Кстаити для чекбоксов можно так:
Код

Memo1->Lines->Add(BoolToStr(CheckBox1->Checked,true);



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Noman
Дата 21.4.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



Klin, сразу видно профи smile  Я весь инет перекопал в поисках нужной инфы  smile 
 Все работет, единственно такой вопрос - я создал memo1, но он мне по сути не нужен (только для отправки данных в файл) и я сделал его невидимым, но при отправке данных получается:
Цитата

M
e
m
o
1
1.exe
2.EXE

Это можно убрать?
Цитата(Klin @  21.4.2007,  15:59 Найти цитируемый пост)
немного не понял

 Я имел ввиду, чтобы можно было или вписать руками или выбрать приложение, как по кнопке "Обзор"

Добавлено через 7 минут и 18 секунд
Только наверное Memo1->Lines->Add(BoolToStr(CheckBox1->Checked,true));

Это сообщение отредактировал(а) Noman - 21.4.2007, 16:14
PM MAIL WWW ICQ   Вверх
Klin
Дата 21.4.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(Noman @  21.4.2007,  17:10 Найти цитируемый пост)
Klin, сразу видно профи

вообще-то нет smile

Цитата(Noman @  21.4.2007,  17:10 Найти цитируемый пост)
Это можно убрать?

У мемо есть свойство WordWrap ставишь false и все.

Цитата(Noman @  21.4.2007,  17:10 Найти цитируемый пост)
 имел ввиду, чтобы можно было или вписать руками или выбрать приложение, как по кнопке "Обзор"

Есть компонент OpenDialog, можно использовать его или другие из вкладки Dialogs
Цитата(Noman @  21.4.2007,  17:10 Найти цитируемый пост)
Только наверное Memo1->Lines->Add(BoolToStr(CheckBox1->Checked,true));

само собой smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Noman
Дата 21.4.2007, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



 Спасибо.
А как можно обойти такой вариант - если  раза выставить настройки не закрывая программу, то соответственно они запишутся 2 раза. Насколько я понимаю, чтобы этого избежать надо выполнить проверку, но что именно надо проверять, и как. Хотя бы в общих чертах...
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 21.4.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Могу дать два варианта.

1. Тупо ввести глобальную логическую переменную и после записи присваивать ей, например, false, а потом проверять при записи, а не является ли она false. Грубо, но работает.

2. Проверять при записи настроек, не совпадает ли только что выбранная настройка с уже записанной.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Klin
Дата 21.4.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Зачем устраивать проверки?Насколько я знаю данные перезаписываются. Если же нет, то просто перед занисенем данных в memo сохраняем его пустым в указанный фал.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Noman
Дата 21.4.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



Цитата(Klin @  21.4.2007,  22:38 Найти цитируемый пост)
Зачем устраивать проверки?Насколько я знаю данные перезаписываются. Если же нет, то просто перед занисенем данных в memo сохраняем его пустым в указанный фал. 

Получается так - открываю программу - захожу в настройки, ввожу туда какие-либо данные. Потом закрываю настройки и вновь, не закрывая саму программу, открываю настройки, и еще раз ввожу данные. После в ini файле получается следующее:
Код

Memo1
checkbox = True
process 1 = 1
process 2 = 2
process 3 = 4
process 4 = 3
process 5 = 5
process 1 = 1
process 2 = 2
process 3 = 4
process 4 = 3
process 5 = 5

вместо
Код

Memo1
checkbox = True
process 1 = 1
process 2 = 2
process 3 = 4
process 4 = 3
process 5 = 5


З.Ы. Я поставил WordWrap false, но это почему-то не помогло...

Это сообщение отредактировал(а) Noman - 21.4.2007, 22:57
PM MAIL WWW ICQ   Вверх
Klin
Дата 21.4.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



А, так у вас мемо постоянно добовляются данные! smile Перед добавлением в мемо
Код

Memo1->Clear();



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Noman
Дата 22.4.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



Код

Memo1->Clear();

 То что надо   smile 

А с помощью чего данные можно оттуда извлечь?
 То бишь по идее этот файл нужен только для того, чтобы настройки не слетали после закрытия программы, и при открытии оной, соответственно, прочитывала имеющийся data.ini

 В программе также присутствует таймер, который изменятся в зависимости от выбранной в настройках RadioButton. То есть запускается программа, смотрит на наличие установок и если не находит их, то остается без действий, а если настройки есть, то завершает выбранные ранее приложения, и в зависимости от выбранной RadioButton (а их 5 штук - "Отключено", "5 секунд", "10 секунд", "15 секунд", "20 секунд") выполняет заданные действия (это ф-ции Close() и Hibernate()).

 Как изменить значения интервала таймера я разобрался:
Код

void __fastcall TSettingBox::TimerBoxChange(TObject *Sender)
{
if(RadioButtonOff->Checked)
{
Main->OffTimer->Interval=0;
Main->OffTimer->Enabled=false;
}
if(RadioButton5->Checked)
{
Main->OffTimer->Interval=5000;
Main->OffTimer->Enabled=true;
}
if(RadioButton10->Checked)
{
Main->OffTimer->Interval=10000;
Main->OffTimer->Enabled=true;
}
if(RadioButton15->Checked)
{
Main->OffTimer->Interval=15000;
Main->OffTimer->Enabled=true;
}
if(RadioButton20->Checked)
{
Main->OffTimer->Interval=20000;
Main->OffTimer->Enabled=true;
}
}

А как мне записать их в файл и выдернуть оттуда пока не понял....
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 22.4.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Чего вы мучаетесь с Memo? Для работы с INI есть спец. класс TIniFile, который превосходно справляется и с записью, и с извлечением настроек. Изучение этого класса - 15 минут времени.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Noman
Дата 22.4.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



А какой вариант лучше использовать? TMemIniFile или TCustomIniFile?

Добавлено через 10 минут и 36 секунд
Хм, а почему файл не хочет создаваться? (ошибок не пишет):
Код

TIniFile *Ini = new TIniFile("data.ini");

PM MAIL WWW ICQ   Вверх
Noman
Дата 22.4.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 21.4.2007
Где: /mnt/Nowhere

Репутация: нет
Всего: нет



Даже код из примера файл упорно не создает  smile 
Код

{
   TIniFile *ini;
   ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" ) );
   ini->WriteInteger( "Form", "Top", Top );
   ini->WriteInteger( "Form", "Left", Left );
   ini->WriteString ( "Form", "Caption", Caption );
   ini->WriteBool   ( "Form", "InitMax",
                       WindowState == wsMaximized );
   delete ini;
}

PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 22.4.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Использовать ни то и ни другое, а просто TIniFile.


Файл создается, но создается он где-то на диске C. Я обычно создаю его так, чтобы проблем не было:
Код

TIniFile *ini = new TIniFile( ExtractFilePath( Application->ExeName ) + "myIni.ini" );



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.