даже и не знаю, поможет ли код, просто его так много... и вроде ничего особенного там нет...
Короче есть у меня в проге такая функция сохранения (удаления/редактирования) списка пользователей, который хранится в файле users.ini, и сохранения лога запуска программы и ее использования, который хранится в файле log +дата+время.log
При работе программы сразу загружается:
окно списка пользователей, на котором есть ListBox(в котором и есть список пользователей), кнопки типа "редактировать запись", "удалить запись", "новая запись" (выполнены в виде картинок). Кнопки эти пока не работают(еще не написал), но при загрузке формы кнопки "редактировать запись", "удалить запись" неактивны (одна картинка) пока не выберешь пользователя в ListBox-е,а как выберешь становятся активными(другая картинка):
Form Create:
[
void __fastcall TForm7::FormCreate(TObject *Sender)
{
GlobalWAS_modified = false;
usr_selected = false;
ListBox1->Clear();
FILE *stream;
stream = fopen("D:\\RESEARCH\\users\\users.ini", "r");
fgets(temp_str, 3, stream);
avail_usr_cnt = StrToInt(temp_str);
int k;
for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream);
fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n1_length[i] = k;
fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n2_length[i] = k;
fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n3_length[i] = k;
fgets(usr_pssw_str, 6, stream);
usr_pssw[i] = usr_pssw_str; //password of i. user
}
fclose(stream);
//--- one more time

---//
FILE *stream2;
stream2 = fopen("D:\\RESEARCH\\users\\users.ini", "r");
fgets(temp_str, 3, stream2);
for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream2);
fgets(usr_name_str, usr_n1_length[i], stream2);
usr_name1[i] = usr_name_str; //1. name of i. user
//ListBox1->Items->Add(usr_name1[i]);
fgets(temp_str, 3, stream);
fgets(usr_name_str, usr_n2_length[i], stream2);
usr_name2[i] = usr_name_str; //2. name of i. user
fgets(temp_str, 3, stream);
fgets(usr_name_str, usr_n3_length[i], stream2);
usr_name3[i] = usr_name_str; //3. name of i. user
FULL_name[i] = usr_name1[i] + " " + usr_name2[i] + " " + usr_name3[i];
ListBox1->Items->Add(FULL_name[i]);
fgets(temp_str, 3, stream);
fgets(usr_pssw_str, 6, stream);
}
fclose(stream2);
Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg");
Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}
]
Form Activate:
[
void __fastcall TForm7::FormActivate(TObject *Sender)
{
if(GlobalWAS_modified == true)
{
usr_selected = false;
ListBox1->Clear();
FILE *stream;
stream = fopen("D:\\RESEARCH\\users\\users.ini", "r");
fgets(temp_str, 3, stream);
avail_usr_cnt = StrToInt(temp_str);
int k;
for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream);
fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n1_length[i] = k;
fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n2_length[i] = k;
fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n3_length[i] = k;
fgets(usr_pssw_str, 6, stream);
usr_pssw[i] = usr_pssw_str; //password of i. user
}
fclose(stream);
//--- one more time

---//
FILE *stream2;
stream2 = fopen("D:\\RESEARCH\\users\\users.ini", "r");
fgets(temp_str, 3, stream2);
for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream2);
fgets(usr_name_str, usr_n1_length[i], stream2);
usr_name1[i] = usr_name_str; //1. name of i. user
//ListBox1->Items->Add(usr_name1[i]);
fgets(temp_str, 3, stream);
fgets(usr_name_str, usr_n2_length[i], stream2);
usr_name2[i] = usr_name_str; //2. name of i. user
fgets(temp_str, 3, stream);
fgets(usr_name_str, usr_n3_length[i], stream2);
usr_name3[i] = usr_name_str; //3. name of i. user
FULL_name[i] = usr_name1[i] + " " + usr_name2[i] + " " + usr_name3[i];
ListBox1->Items->Add(FULL_name[i]);
fgets(temp_str, 3, stream);
fgets(usr_pssw_str, 6, stream);
}
fclose(stream2);
Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg");
Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}
]
ListBox1Click:
[
for(int i=0;i<ListBox1->Items->Count;i++)
{
if(ListBox1->Selected[i])
{
usr_selected = true;
Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user.jpg");
Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user.jpg");
GlobalF_usr = usr_name1[i];
GlobalI_usr = usr_name2[i];
GlobalO_usr = usr_name3[i];
GlobalPSW_usr = usr_pssw[i];
}
}
]
FormClose:
[
void __fastcall TForm7::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
]
Еще на этой форме есть кнопки "доступ"(просмотр log-файлов) и "протоколы". Эти кнопки просто перекидывают на новые почти пустые окна окна, на которых пока(еще не написал) ничего кроме загрузки картинок не происходит.
Так вот ошибка вылетает когда я из любого окна "доступ" и "протоколы" перехожу на окно "пользователи" и выбираю в ListBox-е пользователя. Причем ошибка ОТКРЫТИЯ КАРТИНКИ вылетает, если во всех этих трех формах Action = caFree НЕТУ (в остальных во всех есть), а АКСЕСС ВИАЛЕЙШН когда ХОТЯ бы в ОДНОМ из этих трех файлов в FormClose Action = caFree ЕСТЬ, причем вылетает уже еще только на загрузке формы "пользователи".
Может проще все-таки переписать эту форму заново???