Здравствуйте, ArtDenis, Вы писали:
AD>Ты бы хоть код привёл.
Привожу:
1. Заголовок.
//---------------------------------------------------------------------------
#ifndef AccountManagmentFrmH
#define AccountManagmentFrmH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <CheckLst.hpp>
#include "types.h"
#include <vector>
//---------------------------------------------------------------------------
class TfrmAccountManagment : public TForm
{
__published: // IDE-managed Components
TGroupBox *rgpUserList;
TLabel *Label1;
TComboBox *cbxUserList;
TButton *btnAddUser;
TButton *btnRemoveUser;
TButton *btnEditUser;
TRadioGroup *rgpUserType;
TLabel *Label2;
TCheckListBox *clbUserRights;
TButton *btnOk;
TButton *btnCancel;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall rgpUserTypeClick(TObject *Sender);
void __fastcall clbUserRightsClickCheck(TObject *Sender);
void __fastcall cbxUserListChange(TObject *Sender);
void __fastcall btnRemoveUserClick(TObject *Sender);
void __fastcall btnAddUserClick(TObject *Sender);
void __fastcall btnEditUserClick(TObject *Sender);
private:
public: // User declarations
__fastcall TfrmAccountManagment(TComponent* Owner);
private:
//TUSER_ACCAUNT_RECORD * Accounts;
std::vector<TUSER_ACCAUNT_RECORD> Accounts;
void __fastcall SetUserRightsControlsValues(int UserIndex);
bool init;
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmAccountManagment *frmAccountManagment;
//---------------------------------------------------------------------------
#endif
2. CPP-файл.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "AccountManagmentFrm.h"
#include <IniFiles.hpp>
#include "NameNPassWrdFrm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmAccountManagment *frmAccountManagment;
static const String USER_LIST_PATH(".\\users.ini");
extern TUSER_ACCAUNT_RECORD MainUserAccount;
//---------------------------------------------------------------------------
__fastcall TfrmAccountManagment::TfrmAccountManagment(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::FormCreate(TObject *Sender)
{
init = true;
TIniFile * ini;
try
{
// Çàãðóçèòü ñïèñîê ïîëüçîâàòåëåé
ini = new TIniFile(USER_LIST_PATH);
ini->ReadSections(cbxUserList->Items);
//Accounts = new TUSER_ACCAUNT_RECORD[ cbxUserList->Items->Count ];
// Äëÿ êàæäîãî ïîëüçîâàòåëÿ ïðî÷åñòü ñïèñîê åãî ïàðàìåòðîâ
for (int i = 0; i < cbxUserList->Items->Count; i++)
{
//
TUSER_ACCAUNT_RECORD acnt;
String & s = cbxUserList->Items->Strings[ i ];
acnt.UserName = s;
acnt.PassWrd = ini->ReadString(s, "PassWrd", "");
((int)acnt.UserType) = ini->ReadInteger(s, "UserType", 1);
bool DfltRights = acnt.UserType == utADMIN;
acnt.CanClear = ini->ReadBool(s, "CanClear", DfltRights);
acnt.CanImport = ini->ReadBool(s, "CanImport", DfltRights);
acnt.CanExport = ini->ReadBool(s, "CanExport", DfltRights);
acnt.CanViewRating = ini->ReadBool(s, "CanViewRating", true);
acnt.CanBuildText = ini->ReadBool(s, "CanBuildText", true);
acnt.CanBuildFullText = ini->ReadBool(s, "CanBuildFullText", DfltRights);
Accounts.push_back(acnt);
} /* for (int i = 0; i < cbxUserList->Items->Count; i++) */
for (int i = 0; i < cbxUserList->Items->Count; i++)
if (MainUserAccount.UserName.AnsiCompare(cbxUserList->Items->Strings[ i ]) == 0)
{
cbxUserList->ItemIndex = i;
cbxUserListChange(cbxUserList);
rgpUserType->ItemIndex = 0;
break;
}
}
__finally
{
delete ini;
init = false;
}
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::FormClose(TObject *Sender,
TCloseAction &Action)
{
if (ModalResult == mrCancel)
{
Action = caHide;
return;
}
// Ñîõðàíåíèå íàñòðîåê äëÿ âñå ïîëüçîâàòåëåé
TIniFile * ini;
try
{
ini = new TIniFile(USER_LIST_PATH);
for (int i = 0; i < cbxUserList->Items->Count; i++)
{
String & s = cbxUserList->Items->Strings[ i ];
ini->WriteString(s, "PassWrd", Accounts[ i ].PassWrd);
ini->WriteInteger(s, "UserType", Accounts[ i ].UserType);
// Çàïèñü ðàçðåøåíèé ïîëüçîâàòåëÿ
ini->WriteBool(s, "CanClear", Accounts[ i ].CanClear);
ini->WriteBool(s, "CanExport", Accounts[ i ].CanExport);
ini->WriteBool(s, "CanImport", Accounts[ i ].CanImport);
ini->WriteBool(s, "CanViewRating", Accounts[ i ].CanViewRating);
ini->WriteBool(s, "CanBuildText", Accounts[ i ].CanBuildText);
ini->WriteBool(s, "CanBuildFullText", Accounts[ i ].CanBuildFullText);
}
}
__finally
{
delete ini;
}
Action = caFree;
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::rgpUserTypeClick(TObject *Sender)
{
// Åñëè âûáðàí òèï àäìèíèñòðàòîðà
if (cbxUserList->ItemIndex == -1 || init)
return;
if (rgpUserType->ItemIndex == 0)
{
/* if (MessageDlg("Äàòü ïîëüçîâàòåëþ ïðàââà àäìèíèñòðàòîðà?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)*/
{
Accounts[ cbxUserList->ItemIndex ].InitForAdmin();
clbUserRights->Enabled = false;
}
}
else
{
/* if (MessageDlg("Ïîíèçèòü àäìèíèñòðàòîðà äî ïîëüçîâàòåëÿ?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)*/
{
Accounts[ cbxUserList->ItemIndex ].InitForUser();
clbUserRights->Enabled = MainUserAccount.UserName.AnsiCompare(cbxUserList->Items->Strings[ cbxUserList->ItemIndex ]) == 0;
}
}
//SetUserRightsControlsValues(cbxUserList->ItemIndex);
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::clbUserRightsClickCheck(
TObject *Sender)
{
TUSER_ACCAUNT_RECORD & uar = Accounts[ cbxUserList->ItemIndex ];
switch (clbUserRights->ItemIndex)
{
// Îïóñòîøåíèå ÁÄ
case 0:
uar.CanClear = clbUserRights->Checked[ clbUserRights->ItemIndex ];
break;
// Ýêìïîðò ÁÄ
case 1:
uar.CanExport = clbUserRights->Checked[ clbUserRights->ItemIndex ];
break;
// Èìïîðò ÁÄ
case 2:
uar.CanImport = clbUserRights->Checked[ clbUserRights->ItemIndex ];
break;
// Ïðîñìîòð ðåéòèíãîâ
case 3:
uar.CanViewRating = clbUserRights->Checked[ clbUserRights->ItemIndex ];
break;
// Ñîçäàíèå ïðîñòîãî òåêñòà
case 4:
uar.CanBuildText = clbUserRights->Checked[ clbUserRights->ItemIndex ];
break;
// Ñîçäàíèå ñëîæíîãî òåêñòà
case 5:
uar.CanBuildFullText = clbUserRights->Checked[ clbUserRights->ItemIndex ];
break;
default: break;
}
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::cbxUserListChange(TObject *Sender)
{
// Óñòàíîâêà ôëàæêîâ
SetUserRightsControlsValues(cbxUserList->ItemIndex);
// Óñòàíîâêà îàçðåøåíèé íà èçìåíåíèå ïðàâ ïîëüçîâàòåëåé
/* if (Accounts[ cbxUserList->ItemIndex ].UserType != utADMIN)
{
rgpUserType->Enabled = false;
clbUserRights->Enabled = false;
btnEditUser->Enabled = false;
btnAddUser->Enabled = false;
btnRemoveUser->Enabled = false;
}
else
{
rgpUserType->Enabled = true;
clbUserRights->Enabled = true;
btnEditUser->Enabled = true;
btnAddUser->Enabled = true;
btnRemoveUser->Enabled = true;
} */
}
//---------------------------------------------------------------------------
void __fastcall TfrmAccountManagment::SetUserRightsControlsValues(int UserIndex)
{
clbUserRights->Checked[ 0 ] = Accounts[ UserIndex ].CanClear;
clbUserRights->Checked[ 1 ] = Accounts[ UserIndex ].CanExport;
clbUserRights->Checked[ 2 ] = Accounts[ UserIndex ].CanImport;
clbUserRights->Checked[ 3 ] = Accounts[ UserIndex ].CanViewRating;
clbUserRights->Checked[ 4 ] = Accounts[ UserIndex ].CanBuildText;
clbUserRights->Checked[ 5 ] = Accounts[ UserIndex ].CanBuildFullText;
if (Accounts[ UserIndex ].UserType == utADMIN)
{
rgpUserType->ItemIndex = 0;
}
else
{
rgpUserType->ItemIndex = 1;
}
clbUserRights->Enabled = rgpUserType->ItemIndex == 0;
/* btnAddUser->Enabled = Accounts[ UserIndex ].UserType == utADMIN;
btnRemoveUser->Enabled = Accounts[ UserIndex ].UserType == utADMIN;
btnEditUser->Enabled = Accounts[ UserIndex ].UserType == utADMIN;*/
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::btnRemoveUserClick(TObject *Sender)
{
if (MessageDlg("Âû óâåðåíû?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
{
/* for (int i = cbxUserList->ItemIndex; i < cbxUserList->Items->Count - 1; i++)
Accounts[ i ] = Accounts[ i + 1 ];*/
cbxUserList->Items->Delete(cbxUserList->ItemIndex);
Accounts.erase(&Accounts[ cbxUserList->ItemIndex ]);
}
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::btnAddUserClick(TObject *Sender)
{
String Name, Password;
TfrmNameNPassWrd * dlg;
try
{
dlg = new TfrmNameNPassWrd(Application);
if (dlg->GetNameAndPassword(&Name, &Password))
{
/*TUSER_ACCAUNT_RECORD * tmp = new TUSER_ACCAUNT_RECORD[ cbxUserList->Items->Count + 1 ];
memcpy(tmp, Accounts, sizeof(TUSER_ACCAUNT_RECORD) * cbxUserList->Items->Count);
delete []Accounts;
Accounts = tmp;*/
TUSER_ACCAUNT_RECORD acnt;
acnt.InitForUser();
cbxUserList->Items->Add(Name);
acnt.UserName = Name;
acnt.PassWrd = Password;
acnt.UserType = utUSER;
acnt.InitForUser();
Accounts.push_back(acnt);
}
}
__finally
{
delete dlg;
}
}
//---------------------------------------------------------------------------
#pragma argsused
void __fastcall TfrmAccountManagment::btnEditUserClick(TObject *Sender)
{
String Name, Password;
TfrmNameNPassWrd * dlg;
try
{
dlg = new TfrmNameNPassWrd(Application);
// Ïîëó÷åíèå ñòàðîãî ïàðîëÿ
if (dlg->GetNameAndPassword(&Name, &Password,
false, true, false))
{
// Ïðîâåðêà ïàðîëÿ
if (Password == Accounts[ cbxUserList->ItemIndex ].PassWrd)
{
Password = NULL;
if (dlg->GetNameAndPassword(&Name, &Password,
false))
{
Accounts[ cbxUserList->ItemIndex ].PassWrd = Password;
}
}
}
}
__finally
{
delete dlg;
}
}
//---------------------------------------------------------------------------
Используется BCB 6.0 Build 10.166