Урок 30 Работа с ini файлами. Создание gamepad
February 20, 2007
в колонках играет OST NFS MW- I am Rock
Данная статья научит вас работе с ini файлами и stringgrid. В ini файл обычно сохраняется информация о настройках, но мы используем его для сохранения записанной в программу информации. Мы создадим небольшое приложение типа gamepad, это блокнот в который записываются достижения в играх.
Кидаем на форму два edit'a, один button, один stringgrid, один popupmenu и два label'a. Label1 подписываем, как "Название", размещаем слева возле edit1, label2 - "Жанр" размещаем слева возле edit2. button1, назовем "Добавить", а button2 - "Редактировать". Данные, которые будут заполнятся в блокнот будут хранится в ini файле. По этому в проект добавляем библиотеку #include < inifiles.hpp>.
Теперь создадим с помощью компонента popupmenu выпадающее меню с двумя пунктами, а именно "Удалить" и "Редактировать". Добавим в проект две общедоступные переменные типа int, c и r, их нужно добавить в public файла unit1.h нашего проекта.
__fastcall tform1::tform1(tcomponent* owner)
: tform(owner)
{
stringgrid1->cells[0][0]="Игра";
stringgrid1->cells[1][0]="Жанр"; //сдесь мы просто подписали название колонок
for (unsigned int z=0; z< stringgrid1->rowcount; z++)
{if(banlist1->cells[0][z+1]=="")
{
tinifile *ini;
ini = new tinifile(
changefileext( application->exename, ".ini" ) ); //считываем с файла данные
stringgrid1->cells[0][z+1]=ini->readstring ( "game", z+1, "" );
stringgrid1->cells[1][z+1]=ini->readstring ( "ganr", z+1, "" );
delete ini;
}}
}
Обработчик событий для кнопки "Добавить":
void __fastcall tform1::button1click(tobject *sender)
{
for (unsigned int z=0; z< stringgrid1->rowcount; z++)
{if(stringgrid1->cells[0][z+1]=="") //проверка на наличие свободной ячейки
{ //далее идет добавление записи в компонент stringgrid1
stringgrid1->cells[0][z+1]=edit1->text;
stringgrid1->cells[1][z+1]=edit2->text;
tinifile *ini;
ini = new tinifile(
changefileext( application->exename, ".ini" ) ); //записываем данные в файл
ini->writestring ( "game", z+1, banlist1->cells[0][z+1] );
ini->writestring ( "ganr", z+1, banlist1->cells[1][z+1] );
delete ini;
break;}}
edit1->clear();
edit2->clear();
}
Обработчик событий для пункта меню "Удалить":
void __fastcall tform1::n1click(tobject *sender)
{banlist1->cells[c][r]=""; //просто очищаем данные с ячеек
banlist1->cells[c+1][r]=""; //записываем изменения в файл
tinifile *ini;
ini = new tinifile(
changefileext( application->exename, ".ini" ) );
ini->writestring ( "game", r, banlist1->cells[c][r] );
ini->writestring ( "ganr", r, banlist1->cells[c+1][r] );
delete ini;
}
Обработчик событий для пункта меню "Редактировать":
void __fastcall tform1::n2click(tobject *sender)
{
edit1->text=banlist1->cells[c][r];
edit2->text=banlist1->cells[c+1][r];
}
Обработчик событий для кнопки "Редактировать", принцип таков же, как для добавления записи, просто здесь запись идет не в свободную ячейку, а в выбранную:
void __fastcall tform1::button2click(tobject *sender)
{
banlist1->cells[c][r]=edit1->text;
banlist1->cells[c+1][r]=edit2->text;
tinifile *ini;
ini = new tinifile(
changefileext( application->exename, ".ini" ) );
ini->writestring ( "game", r, banlist1->cells[c][r] );
ini->writestring ( "ganr", r, banlist1->cells[c+1][r] );
delete ini;
edit1->clear();
edit2->clear();
}
Вот вобщем то и всё.
Author of article - [ArtuR] 2007
www.builderhelper.3dn.ru
builder.helper@rambler.ru