📄 account.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Account.h"
#include "EditAcc.h"
#include "option.h"
#include "dido.h"
#include "Param.h"
#include "gridtool.h"
#include "right.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//设置编辑、链表
static void SetEditText(TAccountForm *ta);
//设置Grid标题
static void SetGridTitle(TStringGrid *pGrid);
//设置Grid内容
static void SetGridText(TStringGrid *pGrid,void *pHead);
//帐号节点排序
static int SortAccountOnTList(void *pHead,int nIndex);
//比较两帐号节点
static int CompAccountDot(void *p1,void *p2);
//---------------------------------------------------------------------------
__fastcall TAccountForm::TAccountForm(TComponent* Owner)
: TForm(Owner)
{
m_pHead = new TList;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::FormDestroy(TObject *Sender)
{
DelTList(m_pHead);
delete m_pHead;
m_pHead=NULL;
}
//---------------------------------------------------------------------------
//设置帐号
int SetAccount(TObject *Owner)
{
TAccountForm *Acc;
int rc;
rc=FALSE;
Acc = new TAccountForm((TComponent*)Owner);
if(Acc!=NULL){
Acc->m_nDone=FALSE;
SetEditText(Acc);
Acc->ShowModal();
rc=Acc->m_nDone;
delete Acc;
}
return(rc);
}
//设置编辑、链表
void SetEditText(TAccountForm *ta)
{
ReadAllAccount(ta->m_pHead);
SetGridTitle(ta->m_TextGrid);
SetGridText(ta->m_TextGrid,ta->m_pHead);
if(LookCount(ta->m_pHead)>0)
ta->m_DelBut->Enabled=TRUE;
else ta->m_DelBut->Enabled=FALSE;
ta->m_SaveBut->Enabled=FALSE;
}
//设置Grid标题
void SetGridTitle(TStringGrid *pGrid)
{
static char *pszTitle[]={"No.","用户名","密码","用户级别"};
int x[10];
int i,n,nWidth;
nWidth = pGrid->ClientRect.Width();
n = pGrid->ColCount;
ZeroMemory(x,sizeof(x));
x[0]=25;
if(n>1)nWidth = (nWidth-x[0]-n)/(n-1);
for(i=1;i<n;i++)x[i]=nWidth;
for(i=0;i<n;i++){
pGrid->ColWidths[i]=x[i];
pGrid->Cells[i][0]=pszTitle[i];
}
}
//显示Grid的内容
void SetGridText(TStringGrid *pGrid,void *pHead)
{
void *pCur;
ACCOUNT *a;
TStringList *t;
int i,n;
char szBuf[50];
ClearGridAllText(pGrid,FALSE);
try{ t = new TStringList;}
catch(...){return;}
for(i=0;;i++){
pCur = GetDotOnTList(pHead,i);
if(pCur==NULL)break;
a=LookAccount(pCur);
t->Clear();
wsprintf(szBuf,"%02d",i+1);
t->Add(szBuf);
t->Add(a->szName);
n = lstrlen(a->szPassword);
FillMemory(szBuf,n,'*');szBuf[n]=0;
t->Add(szBuf);
t->Add(GetAccTextWithLevel(a->nLevel));
//显示Grid的nIndex行内容
DispGridText(pGrid,t,i);
}
delete t;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::m_TextGridSelectCell(TObject *Sender,
int ACol,int ARow, bool &CanSelect)
{
int n;
n =LookCount(m_pHead);
if(ARow>n){
CanSelect=FALSE;
m_TextGrid->Row=n>0?n:1;
}
else CanSelect=TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::m_CloseButClick(TObject *Sender)
{
static char pszText[]="数据还没有保存!\n\n是否保存?";
int rc;
if( m_SaveBut->Enabled){
rc= Application->MessageBox(pszText,GetMainTitle(),
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1|MB_APPLMODAL);
if(rc==IDYES) m_SaveButClick(Sender);
}
ModalResult=IDOK;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::m_AddButClick(TObject *Sender)
{
int nIndex,rc;
void *pHead;
rc=((TControl *)Sender)->Tag-100;
if(rc>0) nIndex= m_TextGrid->Row-1;
else nIndex=-1;
pHead = m_pHead;
rc=ReworkAccount(this,pHead,nIndex);
if(rc>=0){//显示Grid的nIndex行内容
nIndex = SortAccountOnTList(pHead,rc);//排序
if(rc>nIndex)rc=nIndex;
if(rc>=0){
SetGridText(m_TextGrid,pHead);
m_TextGrid->Row=nIndex+1;
}
m_SaveBut->Enabled=TRUE;
m_DelBut->Enabled=TRUE;
}
}
void __fastcall TAccountForm::m_DelButClick(TObject *Sender)
{
static char
pszText[]="是否真的删除\n\n用户名为:\"%s\"的帐号?";
void *p,*pHead;
char szBuf[100];
int rc,nIndex,nCount;
pHead = m_pHead;
nIndex= m_TextGrid->Row-1;
p = GetDotOnTList(pHead,nIndex);
if(p!=NULL){
wsprintf(szBuf,pszText,LookAccount(p)->szName);
rc= Application->MessageBox(szBuf,GetMainTitle(),
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
if(rc==IDYES){
DelDotOnTList(pHead,nIndex);
nCount = LookCount(pHead);
SetGridText(m_TextGrid,pHead);//删除最后行显示
if(nCount<=0)nIndex=1;
if(nIndex>nCount)nIndex=nCount;
m_TextGrid->Row=nIndex;
if(nCount<=0) m_DelBut->Enabled=FALSE;
m_SaveBut->Enabled=TRUE;
}
}
}
void __fastcall TAccountForm::m_SaveButClick(TObject *Sender)
{
SaveAllAccount(m_pHead);
m_SaveBut->Enabled=FALSE;
m_nDone=TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::m_TextGridDrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(State.Contains(gdFixed))//显示格栅标题
DispGridTitle(Sender,ACol,ARow,Rect,clRed);
else if(ACol>1)//设置格栅文字颜色,文字居中
SetGridTextColor(Sender,ACol,ARow,Rect,-1,DT_CENTER);
}
//帐号节点排序
int SortAccountOnTList(void *pHead,int nIndex)
{
nIndex=SortDotOnTList(pHead,nIndex,CompAccountDot);
return(nIndex);
}
//比较两帐号节点
int CompAccountDot(void *p1,void *p2)
{
return(lstrcmpi(LookAccount(p1)->szName,LookAccount(p2)->szName));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -