#ifndef DUJUNLITOOLSCPP
#define DUJUNLITOOLSCPP
//函数库2002-11-15 19:26
#include <vcl.h>
#include <grids.hpp>
#include <stdio.h>
#include <utilcls.h>
#include <printers.hpp>
#include <IdBaseComponent.hpp>
#include <IdCoder.hpp>
#include <IdCoderMessageDigest.hpp>
///////////////////////////md5
AnsiString __fastcall Strip(AnsiString S)
{
return S.Delete(1, 2);
}
AnsiString md5ToString(AnsiString S)
{
AnsiString AHex;
for (int i=1; i<=S.Length(); i++)
{
AHex += IntToHex((unsigned char)S[i], 2);// + " ";
}
return AHex;
}
String Md5Str(String src)
{
TIdCoderMD5 *md5=new TIdCoderMD5(NULL);
md5->Reset();
md5->AutoCompleteInput = true;
String tmp=md5ToString(Strip(md5->CodeString(src)));
delete md5;
md5=NULL;
return tmp;
}
//////////////////////////md5 end
bool OpenForm(TForm * WForm)
{
//if(OpenForm(frmmem)==False)
// {
// frmmem=new Tfrmmem(Application);
// OpenForm(frmmem);
// }//使用例子
int i;
bool FormExist;
if(WForm==NULL) return False;
FormExist=False;
for(i=0;i<Screen->FormCount;i++)
if(Screen->Forms[i]->ClassType()==WForm->ClassType())
{
FormExist=True;
break;
}
if(FormExist==False) return FormExist;
if(WForm->WindowState==wsMinimized)
ShowWindow(WForm->Handle,SW_SHOWNORMAL);
else
ShowWindow(WForm->Handle,SW_SHOWNA);
if(!WForm->Visible) WForm->Visible=True;
if(GetWindowLong(WForm->Handle,GWL_EXSTYLE&WS_EX_APPWINDOW)!=WS_EX_APPWINDOW)
SetWindowLong(WForm->Handle,GWL_EXSTYLE,WS_EX_APPWINDOW);
WForm->BringToFront();
WForm->SetFocus();
return True;
}
//----------------------------------------------------------------
String repl(String sstr,String fstr,String repstr)
{
//替换字符串函数
String tmpstr="";
int x = sstr.AnsiPos(fstr);
if(x==0)
{
tmpstr=sstr;
//Application->MessageBoxA(sstr.c_str(),"",MB_OK); //未找到查找字串,原样返回
return tmpstr;
}
while(x != 0)
{
tmpstr +=sstr.SubString(1,x-1) + repstr;
sstr = sstr.SubString(x+fstr.Length(),sstr.Length());
x = sstr.AnsiPos(fstr);
}
tmpstr+=sstr;
//Application->MessageBoxA(tmpstr.c_str(),"",MB_OK);
return tmpstr;
}
//---------------------------------------------
String sqlstr(String sqlstr)
{
//
if(sqlstr!="")
{
sqlstr=repl(sqlstr,"'","''");
}
return sqlstr;
}
//-------------------------------------
TDateTime pmon(TDateTime dt)
{//取上一个月的日期
unsigned short year, mon, day, hour, min, sec,msec;
dt.DecodeDate( &year,&mon,&day);
dt.DecodeTime( &hour, &min, &sec, &msec );
if(mon<=1)
{
year-=1;
mon=12;
}
else
{
mon-=1;
}
dt=::EncodeDate(year,mon,day);
return dt;
}
TDateTime nmon(TDateTime dt)
{//取下一个月的日期
unsigned short year, mon, day, hour, min, sec,msec;
dt.DecodeDate( &year,&mon,&day);
dt.DecodeTime( &hour, &min, &sec, &msec );
if(mon>=12)
{
year+=1;
mon=1;
}
else
{
mon+=1;
}
dt=::EncodeDate(year,mon,day);
return dt;
}
//////////////////////////////////////////////////////////////////////////////////////
//将数据集得数据导出到Excel;
//void DataSetToExcel(TDataSet* DataSet,bool H); //H:表按行排(正常)
//Variant Ex,Wbs,Wb,Sh1;
//////////////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
/*
//不完善,错误为:如果数据含有过滤属性,则用RecCount就不合适
void DataSetToExcel(TDataSet* DataSet,bool H)
{
Variant Ex,Wbs,Wb,Sh1;
int CurrRow,CurrCol;
CurrCol=0;
CurrRow=0;
Screen->Cursor=crHourGlass ;
if(Ex.IsEmpty())
try
{
HWND hPrevApp = ::FindWindow(NULL,"Microsoft Excel");
if(!hPrevApp)
{
Ex=Variant::CreateObject("Excel.Application");
}
else
{
Ex=Variant::GetActiveObject("Excel.Application");
}
}
catch(...)
{
Screen->Cursor=crDefault;
ShowMessage("打开Excel出错,请确认你已经正确安装了MS Office!");
return;
}
try
{
if(Ex.OlePropertyGet("ActiveWorkBook").IsEmpty())
Ex.OlePropertyGet("WorkBooks").OleProcedure("ADD");
if(Wb.IsEmpty())
Wb=Ex.OlePropertyGet("ActiveWorkBook");
Sh1=Wb.OlePropertyGet("Sheets").OleFunction("Add");
Ex.OlePropertySet("Visible",true);
}
catch(...)
{
Ex=Ex.Empty();
Wb=Wb.Empty();
DataSetToExcel(DataSet,H);
}
if(H)
{
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrCol++;
Sh1.OlePropertyGet("Cells",1,CurrCol).OlePropertySet("value",DataSet->Fields->Fields[j]->FieldName);
}
}
DataSet->First();
for (int i=0;i<DataSet->RecordCount;i++)
{
CurrCol=0;
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrCol++;
Sh1.OlePropertyGet("Cells",i+2,CurrCol).OlePropertySet("value",DataSet->Fields->Fields[j]->AsString);
}
}
Application->ProcessMessages();
DataSet->Next();
}
}
else
{
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrRow++ ;
Sh1.OlePropertyGet("Cells",CurrRow,1).OlePropertySet("value",DataSet->Fields->Fields[j]->FieldName);
DataSet->First();
for (int i=0;i<DataSet->RecordCount;i++)
{
Sh1.OlePropertyGet("Cells",CurrRow,i+2).OlePropertySet("value",DataSet->Fields->Fields[j]->AsString);
DataSet->Next();
}
}
}
}
Screen->Cursor=crDefault;
} */
void DataSetToExcel(TDataSet* DataSet,bool H)
{
Variant Ex,Wbs,Wb,Sh1;
int CurrRow,CurrCol;
CurrCol=0;
CurrRow=0;
Screen->Cursor=crHourGlass ;
if(Ex.IsEmpty())
try
{
HWND hPrevApp = ::FindWindow(NULL,"Microsoft Excel");
if(!hPrevApp)
{
Ex=Variant::CreateObject("Excel.Application");
}
else
{
Ex=Variant::GetActiveObject("Excel.Application");
}
}
catch(...)
{
Screen->Cursor=crDefault;
ShowMessage("打开Excel出错,请确认你已经正确安装了MS Office!");
return;
}
try
{
if(Ex.OlePropertyGet("ActiveWorkBook").IsEmpty())
Ex.OlePropertyGet("WorkBooks").OleProcedure("ADD");
if(Wb.IsEmpty())
Wb=Ex.OlePropertyGet("ActiveWorkBook");
Sh1=Wb.OlePropertyGet("Sheets").OleFunction("Add");
}
catch(...)
{
Ex=Ex.Empty();
Wb=Wb.Empty();
DataSetToExcel(DataSet,H);
}
if(H)
{
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrCol++;
Sh1.OlePropertyGet("Cells",1,CurrCol).OlePropertySet("value",DataSet->Fields->Fields[j]->FieldName);
}
}
DataSet->First();
/* for (int i=0;i<DataSet->RecordCount;i++)
{
CurrCol=0;
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrCol++;
Sh1.OlePropertyGet("Cells",i+2,CurrCol).OlePropertySet("value",DataSet->Fields->Fields[j]->AsString);
}
}
Application->ProcessMessages();
DataSet->Next();
}
*/
int i=0;
while(!DataSet->Eof)
{
CurrCol=0;
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrCol++;
Sh1.OlePropertyGet("Cells",i+2,CurrCol).OlePropertySet("value",DataSet->Fields->Fields[j]->AsString);
}
}
Application->ProcessMessages();
DataSet->Next();
i++;
}
}
else
{
for (int j=0;j<DataSet->Fields->Count;j++)
{
if(DataSet->Fields->Fields[j]->Visible)
{
CurrRow++ ;
Sh1.OlePropertyGet("Cells",CurrRow,1).OlePropertySet("value",DataSet->Fields->Fields[j]->FieldName);
DataSet->First();
int i=0;
while(!DataSet->Eof)
{
Sh1.OlePropertyGet("Cells",CurrRow,i+2).OlePropertySet("value",DataSet->Fields->Fields[j]->AsString);
Application->ProcessMessages();
DataSet->Next();
i++;
}
}
}
}
Ex.OlePropertySet("Visible",true);
Screen->Cursor=crDefault;
}
//-------------------------------------------------------------------------
String makestr(String mstr,char b,int len,bool QH)//QH在前或者后加字符
{
int slen=mstr.Length();
String tmp="";
if(slen<len)
{
if(QH)
{
tmp=AnsiString::StringOfChar(b,len-slen)+mstr;
}
else
{
tmp=mstr+AnsiString::StringOfChar(b,len-slen);
}
}
else
{
tmp=mstr;
}
return tmp;
}
//------------------------------------------------------------------------
String getdtbh()
{
//按日期生成类似20001025--000001的编号
TDateTime dt;
unsigned short year,month,day;
::DecodeDate(dt.CurrentDate(),year,month,day);
String tmp="";
tmp=String(year)+makestr(month,'0',2,true)+makestr(day,'0',2,true);
return tmp;
}
//------------------------------------------------------------------------
//=============================================================================
// 函数使用说明:输入表名称,取得所有纪录的最大值加一,转换成n位的00001形式
// 输入:cTableName 数据库中的某一表的名称
// nNumkeep 格式化后字符串的总长度
//=============================================================================
AnsiString __fastcall TMainForm::GetPerId(AnsiString cTableName,int nNumkeep)
{
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Select Count(*) AS curn from "+cTableName);
ADOQuery1->Prepared;
ADOQuery1->Active=true;
ADOQuery1->Open();
// ShowMessage(ADOQuery1->Fields->Fields[0]->AsString) ;
int ngetn=ADOQuery1->FieldByName("curn")->AsInteger;
ADOQuery1->Active=false;
ADOQuery1->Close();
return Get00Str(ngetn+1,nNumkeep);
}
/*-----------------------------------------------------------------------
函数:Get00Str
功能:生成 0000000x 形字符串
输入: oragn 被转换的整形数
nNumkeep 格式化后字符串的总长度
------------------------------------------------------------------------*/
AnsiString __fastcall TMainForm::Get00Str(int oragn,int nNumkeep)
{
AnsiString cc=IntToStr(oragn);
cc=cc.Trim();
AnsiString tmp0="";
int Flen=cc.Length();
for(int j=0;j<nNumkeep-Flen;j++)
{
tmp0="0"+tmp0;
}
cc=tmp0+cc;
return cc;
}
//==============================================================================