#include "ToolsUnit.h"
#include <DateUtils.hpp>
// 3Msoft Tools for AlManhaj +... Programs -
/////////////////////////////////////////////
//---------------------------------------------------------------------------
void mSortList(TStrings *StrList,int indx,int StrLen)
{
AnsiString tmpStr;
for(int i=0;i<StrList->Count;i++)
for(int j=i+1;j<StrList->Count;j++)
if(StrList->Strings[i].SubString(indx,StrLen)>StrList->Strings[j].SubString(indx,StrLen))
{
tmpStr = StrList->Strings[i];
StrList->Strings[i] = StrList->Strings[j];
StrList->Strings[j] = tmpStr;
}
}
//---------------------------------------------------------------------------
bool NetConnected(int Flag)
{
typedef BOOL (WINAPI *PF_INETGETCONNECTEDSTATE)(LPDWORD, DWORD);
HANDLE hWinInet;
PF_INETGETCONNECTEDSTATE pfInternetGetConnectedState;
hWinInet = LoadLibrary("WININET.DLL"); //Chargement de la dll
if(hWinInet == NULL)
{
return -1;
}
pfInternetGetConnectedState = (PF_INETGETCONNECTEDSTATE) GetProcAddress(
hWinInet, "InternetGetConnectedState");
if(pfInternetGetConnectedState == NULL)
{
if(hWinInet) FreeLibrary(hWinInet);
return -1 ;
}
//.............
DWORD TypeCon ;
if (pfInternetGetConnectedState(&TypeCon, 0)) //appel de la fonction
{
if(hWinInet) FreeLibrary(hWinInet);
return 1;
}
else
{
if(hWinInet) FreeLibrary(hWinInet);
return 0;
}
}
///////////////////////////////////////////////////////////////////////////////
int GetOpNum(AnsiString Str)
{
if(Str == " ")
return 2;
else if(Str == "+")
return 0;
else if(Str == "-")
return 1;
return 2;
}
//---------------------------------------------------------------------------
AnsiString SetOpNum(int Num)
{
if(Num == 1)
return "- ";
else if(Num == 0)
return "+ ";
else if(Num == 2)
return " ";
return " ";
}
//---------------------------------------------------------------------------
unsigned short AgeCalc(TDate DOB)
{
unsigned short y1;
unsigned short y2;
unsigned short m1;
unsigned short m2;
unsigned short d1;
unsigned short d2;
DecodeDate(DOB,y1,m1,d1);
DecodeDate(Now(),y2,m2,d2);
if(CompareDate(EncodeDate(y2,m2,d2),EncodeDate(y2,m1,d1)) == LessThanValue)
return y2-y1-1;
else
return y2-y1;
}
TLabel* FindLabel(TPanel *frm, TEdit *cntrl)
{
for(int i=0;i<frm->ControlCount;i++)
{
if(frm->Controls[i]->Name==(cntrl->Name+"L")) return (TLabel *)frm->Controls[i];
}
return NULL;
}
void MoveToControl(TPanel *frm,TControl *cntrl,int nxt)
{
if(cntrl->Tag==1 && nxt==-1) return;
for(int i=0;i<frm->ControlCount;i++)
if(frm->Controls[i]->Tag==(cntrl->Tag+nxt)) ((TEdit *)frm->Controls[i])->SetFocus();
return;
}
void FocusMe(TPanel *frm, TEdit *edt)
{
try{FindLabel(frm,edt)->Font->Color=(TColor)RGB(250,20,80);}
catch(...){}
AnsiString clsname;
edt->BevelInner = bvRaised;
edt->BevelKind = bkSoft;
edt->BevelOuter = bvRaised;
clsname=edt->ClassName();
if(clsname=="TDBComboBox"||clsname=="TComboBox") edt->BevelKind=bkNone;
else if(clsname=="TDBMemo") {edt->BorderStyle=bsSingle;edt->BevelKind=bkNone;}
}
void LostMe(TPanel *frm,TEdit *edt)
{
try{FindLabel(frm,edt)->Font->Color=(TColor)RGB(0,0,0);}
catch(...){}
AnsiString clsname;
edt->BevelInner = bvRaised;
edt->BevelKind = bkFlat;
edt->BevelOuter = bvLowered;
clsname=edt->ClassName();
if(clsname=="TDBComboBox"||clsname=="TComboBox") edt->BevelKind=bkNone;
else if(clsname=="TDBMemo") {edt->BorderStyle=bsSingle;edt->BevelKind=bkNone;}
}
//------------------------------------------------------------------------------
AnsiString mTrim(AnsiString Str)
{
AnsiString tmpStr="";
for(int i=0;Str.c_str()[i];i++)
if(Str.c_str()[i]!=32)
tmpStr = tmpStr + Str.c_str()[i];
return tmpStr;
}
//------------------------------------------------------------------------------
TDate GetDateBefore(TDate mDate,int NumOfMount,short Pos)
{
int NumOfYear = 0;
unsigned short mDay;
unsigned short mMonth = StrToInt(mDate.FormatString("MM"));
unsigned short mYear = StrToInt(mDate.FormatString("YYYY"));
NumOfYear = NumOfMount/12;
NumOfMount = NumOfMount%12;
mYear = mYear- NumOfYear;
if(mMonth-NumOfMount<1)
{
mMonth =(mMonth-NumOfMount)+12;
mYear--;
}
else
mMonth =mMonth-NumOfMount;
mDay = DaysInAMonth(mYear,mMonth);
if(Pos==1)
return RecodeDate(NULL,mYear, mMonth, 1);
else if(Pos==2)
return RecodeDate(NULL,mYear, mMonth,15);
else
return RecodeDate(NULL,mYear, mMonth,mDay);
}
//------------------------------------------------------------------------------
TDate GetDateAfter(TDate mDate,int NumOfMount,short Pos)
{
int NumOfYear = 0;
unsigned short mDay;
unsigned short mMonth = StrToInt(mDate.FormatString("MM"));
unsigned short mYear = StrToInt(mDate.FormatString("YYYY"));
unsigned short sDay = StrToInt(mDate.FormatString("DD"));
NumOfYear = NumOfMount/12;
NumOfMount = NumOfMount%12;
mYear = mYear+NumOfYear;
if(mMonth+NumOfMount>12)
{
mMonth =(mMonth+NumOfMount)-12;
mYear++;
}
else
mMonth =mMonth+NumOfMount;
mDay = DaysInAMonth(mYear,mMonth);
if(Pos==1)
return RecodeDate(NULL,mYear, mMonth, 1);
else if(Pos==2)
return RecodeDate(NULL,mYear, mMonth,15);
else if(Pos==3) //3->
return RecodeDate(NULL,mYear, mMonth,mDay);
else if(Pos==4) //4-> the same day
{
int dm =DaysInMonth(RecodeDate(NULL,mYear,mMonth,1));
if(dm<sDay)
return RecodeDate(NULL,mYear, mMonth,dm);
else
return RecodeDate(NULL,mYear, mMonth,sDay);
}
return mDate;
}
//------------------------------------------------------------------------------
int GetCPUSpeed()
{
int DelayTime = 500; // measure time in ms
DWORD TimerHi;
DWORD TimerLo;
int PriorityClass;
int Priority;
PriorityClass = GetPriorityClass(GetCurrentProcess());
Priority = GetThreadPriority(GetCurrentThread());
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
{
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
};
Sleep(DelayTime);
asm
{
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
};
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
return int(TimerLo / (1000.0 * DelayTime));
}
//------------------------------------------------------------------------------
bool mDelDir(AnsiString mDir,bool flag)
{
TSearchRec sr;
if (FindFirst(mDir+"\\*.*",faAnyFile, sr)==0)
do
{//Delete the Lock file in paradox .
DeleteFile(mDir+"\\"+sr.Name);
}while (FindNext(sr) == 0);
FindClose(sr);
if(flag)
return RemoveDir(mDir);
else
return true;
}
//------------------------------------------------------------------------------
int mLockTable(AnsiString DbFile)
{
int ret;
TTable *mTable = new TTable(NULL);
mTable->DatabaseName = "";
mTable->TableName = DbFile;
try
{
mTable->Open();
ret = DbiAcqPersistTableLock(mTable->DBHandle,mTable->TableName.c_str(), StrNew(szPARADOX));
}
catch(...)
{
mTable->Close();
delete mTable;
return 1;
}
mTable->Close();
delete mTable;
if(ret !=DBIERR_NONE)
return 2; // File is Used by users ...
return 0;
}
//------------------------------------------------------------------------------
void mCreateIndex(AnsiString TableName,AnsiString KeyName)
{
TTable *oTable;
try
{
Screen->Cursor = crHourGlass;
oTable = new TTable(NULL);
oTable->DatabaseName = "";
oTable->Exclusive = true;
Application->ProcessMessages();
DeleteFile(TableName+".px");
//////////////////////////////////////////////////////////////////////////
oTable->TableName = TableName;
oT