829 lines
26 KiB
C++
829 lines
26 KiB
C++
//---------------------------------------------------------------------------
|
||
|
||
#include <vcl.h>
|
||
#pragma hdrstop
|
||
|
||
#include "dbcedit.h"
|
||
#include "stdio.h"
|
||
#include "IdGlobal.hpp"
|
||
#include <inifiles.hpp>
|
||
#include "TitleFrm.h"
|
||
#include <dir.h>
|
||
#include "thOpenSource.h"
|
||
#include "SearchFrm.h"
|
||
//#include "SysUtils.hpp"
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
#pragma package(smart_init)
|
||
#pragma resource "*.dfm"
|
||
TFrmMain* FrmMain;
|
||
//---------------------------------------------------------------------------
|
||
__fastcall TFrmMain::TFrmMain(TComponent* Owner)
|
||
: TForm(Owner)
|
||
{
|
||
OpenOk = false;
|
||
Term = false;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::btOpenClick(TObject* Sender)
|
||
{
|
||
if (OpenDialog1->Execute())
|
||
{
|
||
if (FileExists(OpenDialog1->FileName))
|
||
{
|
||
OpenOk = false;
|
||
if (thOpen)
|
||
{
|
||
thOpen->Terminate();
|
||
}
|
||
thOpen = new thOpenFile(false);
|
||
//thOpen->Priority = tpTimeCritical;
|
||
pnFileName->Caption = OpenDialog1->FileName;
|
||
}
|
||
else
|
||
{
|
||
OpenOk = false;
|
||
pnFileName->Caption = "";
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TFrmMain::btSaveClick(TObject* Sender)
|
||
{
|
||
//CurrentOpenFile;
|
||
if (OpenOk)
|
||
{
|
||
SaveToFile(CurrentOpenFile.c_str());
|
||
}
|
||
else
|
||
{
|
||
ShowMessage("文件未打开完成!");
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void TFrmMain::SaveToFile(const char* pszFileName)
|
||
{
|
||
char szFileName[255];
|
||
FILE* stream;
|
||
|
||
|
||
|
||
|
||
fnsplit(pszFileName, 0, 0, szFileName, 0);
|
||
strcat(szFileName, "_new.dbc");
|
||
|
||
|
||
AnsiString NewFileName = ExtractFilePath(Application->ExeName) + szFileName; //=pszFileName;
|
||
int iFileHandle; //文件句柄
|
||
AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini";
|
||
AnsiString SectionName = ExtractFileName(CurrentOpenFile);
|
||
|
||
DWORD w;
|
||
|
||
CopyFileTo(pszFileName, NewFileName);
|
||
|
||
iFileHandle = FileOpen(NewFileName, fmOpenRead | fmOpenWrite); //打开文件
|
||
|
||
if ((stream = fopen(CurrentOpenFile.c_str(), "r+"))
|
||
== NULL)
|
||
{
|
||
ShowMessage("打开文件出错");
|
||
return;
|
||
}
|
||
|
||
|
||
int iVal;
|
||
float fVal;
|
||
bool isFloat;
|
||
int ColType;
|
||
|
||
FileSeek(iFileHandle, 0x14, 0);
|
||
TIniFile* ini;
|
||
ini = new TIniFile(iniSetFile);
|
||
|
||
for (int i = 1; i < sgEdit->RowCount; i++)
|
||
{
|
||
for (int j = 1; j < sgEdit->ColCount; j++)
|
||
{
|
||
if (j == 1) //ID
|
||
{
|
||
iVal = StrToInt(sgEdit->Cells[j][i]);
|
||
FileWrite(iFileHandle, &iVal, 4);
|
||
}
|
||
else
|
||
{
|
||
|
||
//ColType= ini->ReadInteger(SectionName,"ColType"+IntToStr(j-1),0);
|
||
//thOpen->ColType[10000];
|
||
|
||
switch (thOpen->ColType[j])
|
||
{
|
||
case 0: //整型
|
||
iVal = StrToFloat(sgEdit->Cells[j][i]);
|
||
FileWrite(iFileHandle, &iVal, 4);
|
||
break;
|
||
case 1: //浮点
|
||
fVal = StrToFloat(sgEdit->Cells[j][i]);
|
||
FileWrite(iFileHandle, &fVal, 4);
|
||
break;
|
||
case 2: //文本
|
||
fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (j - 1)) * 4, 0);
|
||
fread(&iVal, 4, 1, stream);
|
||
FileWrite(iFileHandle, &iVal, 4);
|
||
break;
|
||
default: //整型
|
||
iVal = StrToFloat(sgEdit->Cells[j][i]);
|
||
FileWrite(iFileHandle, &iVal, 4);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
FileClose(iFileHandle);
|
||
fclose(stream);
|
||
|
||
delete ini;
|
||
ShowMessage("Save To File:" + NewFileName);
|
||
}
|
||
void __fastcall TFrmMain::btIntTypeClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == true)
|
||
{
|
||
AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini";
|
||
AnsiString SectionName = ExtractFileName(CurrentOpenFile);
|
||
TIniFile* ini;
|
||
ini = new TIniFile(iniSetFile);
|
||
ini->WriteInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 0);
|
||
delete ini;
|
||
thOpen->ColType[sgEdit->Col] = 0;
|
||
//重新打开对应列的值
|
||
//OpenFileCol(AnsiString FileName,int ColType);
|
||
OpenFileCol(CurrentOpenFile, sgEdit->Col, 0);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
|
||
void __fastcall TFrmMain::btFloatTypeClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == true)
|
||
{
|
||
AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini";
|
||
AnsiString SectionName = ExtractFileName(CurrentOpenFile);
|
||
TIniFile* ini;
|
||
ini = new TIniFile(iniSetFile);
|
||
ini->WriteInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 1);
|
||
delete ini;
|
||
thOpen->ColType[sgEdit->Col] = 1;
|
||
OpenFileCol(CurrentOpenFile, sgEdit->Col, 1);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::PopupMenu1Popup(TObject* Sender)
|
||
{
|
||
if (OpenOk == true)
|
||
{
|
||
AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini";
|
||
AnsiString SectionName = ExtractFileName(CurrentOpenFile);
|
||
int ColType;
|
||
TIniFile* ini;
|
||
ini = new TIniFile(iniSetFile);
|
||
ColType = ini->ReadInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 0);
|
||
delete ini;
|
||
switch (ColType)
|
||
{
|
||
case 0:
|
||
btIntType->Checked = true;
|
||
btFloatType->Checked = false;
|
||
btTxtType->Checked = false;
|
||
break;
|
||
case 1:
|
||
btIntType->Checked = false;
|
||
btFloatType->Checked = true;
|
||
btTxtType->Checked = false;
|
||
break;
|
||
case 2:
|
||
btIntType->Checked = false;
|
||
btFloatType->Checked = false;
|
||
btTxtType->Checked = true;
|
||
break;
|
||
default:
|
||
btIntType->Checked = true;
|
||
btFloatType->Checked = false;
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::N1Click(TObject* Sender)
|
||
{
|
||
AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini";
|
||
AnsiString SectionName = ExtractFileName(CurrentOpenFile);
|
||
int ColType;
|
||
FrmTitle->edTitle->Text = sgEdit->Cells[sgEdit->Col][0];
|
||
if (FrmTitle->ShowModal() == mrOk)
|
||
{
|
||
TIniFile* ini;
|
||
ini = new TIniFile(iniSetFile);
|
||
ini->WriteString(SectionName, "ColTitle" + IntToStr(sgEdit->Col), FrmTitle->edTitle->Text);
|
||
delete ini;
|
||
sgEdit->Cells[sgEdit->Col][0] = FrmTitle->edTitle->Text;
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
|
||
|
||
void __fastcall TFrmMain::FormDestroy(TObject* Sender)
|
||
{
|
||
if (thOpen)
|
||
{
|
||
thOpen->Terminate();
|
||
SleepEx(200, 0);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::ToolButton1Click(TObject* Sender)
|
||
{
|
||
bool SeFlag = true;
|
||
if (FrmSearch->ShowModal() == mrOk)
|
||
{
|
||
switch (FrmSearch->rgSI->ItemIndex)
|
||
{
|
||
case 0: //向上找;
|
||
for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col - 1; i > sgEdit->ColCount; i--)
|
||
{
|
||
if (i % sgEdit->ColCount != 0)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Col = i - sgEdit->ColCount * i / sgEdit->ColCount;
|
||
sgEdit->Row = i / sgEdit->ColCount;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach Top,Find Nothing.");
|
||
{
|
||
break;
|
||
}
|
||
case 1: //向下找;
|
||
for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col + 1; i < sgEdit->ColCount * sgEdit->RowCount; i++)
|
||
{
|
||
if (i % sgEdit->ColCount != 0)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Col = i - sgEdit->ColCount * (i / sgEdit->ColCount);
|
||
sgEdit->Row = i / sgEdit->ColCount;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach End,Find Nothing");
|
||
break;
|
||
case 2: //当前列向上找;
|
||
for (int i = sgEdit->Row; i > 1; i--)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Row = i;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach col top,Find Nothing");
|
||
break;
|
||
case 3: //当前列向下找;
|
||
for (int i = sgEdit->Row; i < sgEdit->RowCount; i++)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Row = i;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach col end,Find Nothing.");
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::sgEditKeyDown(TObject* Sender, WORD& Key,
|
||
TShiftState Shift)
|
||
{
|
||
|
||
bool SeFlag = true;
|
||
if (Key == VK_F3)
|
||
{
|
||
switch (FrmSearch->rgSI->ItemIndex)
|
||
{
|
||
case 0: //向上找;
|
||
for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col - 1; i > sgEdit->ColCount; i--)
|
||
{
|
||
if (i % sgEdit->ColCount != 0)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Col = i - sgEdit->ColCount * i / sgEdit->ColCount;
|
||
sgEdit->Row = i / sgEdit->ColCount;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach Top,Find Nothing.");
|
||
break;
|
||
case 1: //向下找;
|
||
for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col + 1; i < sgEdit->ColCount * sgEdit->RowCount; i++)
|
||
{
|
||
if (i % sgEdit->ColCount != 0)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Col = i - sgEdit->ColCount * (i / sgEdit->ColCount);
|
||
sgEdit->Row = i / sgEdit->ColCount;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach End,Find Nothing.");
|
||
break;
|
||
case 2: //当前列向上找;
|
||
for (int i = sgEdit->Row; i > 1; i--)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Row = i;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach col Top,Find Nothing.");
|
||
break;
|
||
case 3: //当前列向下找;
|
||
for (int i = sgEdit->Row; i < sgEdit->RowCount; i++)
|
||
{
|
||
if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i],
|
||
FrmSearch->edSeach->Text)) //找到了
|
||
{
|
||
sgEdit->Row = i;
|
||
SeFlag = false;
|
||
break;
|
||
}
|
||
}
|
||
if (SeFlag) ShowMessage("Seach col end,Find Nothing.");
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::sgEditSelectCell(TObject* Sender, int ACol,
|
||
int ARow, bool& CanSelect)
|
||
{
|
||
//
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TFrmMain::OpenFileCol(AnsiString FileName, int ColIndex, int ColType)
|
||
{
|
||
int iFileHandle; //文件句柄
|
||
char Txtbuf[255];
|
||
int iVal;
|
||
float fVal;
|
||
FILE* stream;
|
||
long curpos, length;
|
||
DWORD dwRows, dwCols, dwRowLen, dwTextLen;
|
||
|
||
DWORD dwTextStartPos;
|
||
char* pTextPtr ;
|
||
|
||
|
||
if ((stream = fopen(FileName.c_str(), "r+"))
|
||
== NULL)
|
||
{
|
||
ShowMessage("Open File Error");
|
||
return;
|
||
}
|
||
|
||
curpos = ftell(stream);
|
||
fseek(stream, 0L, SEEK_END);
|
||
length = ftell(stream);
|
||
|
||
|
||
switch (ColType)
|
||
{
|
||
case 0: //整型值 Int
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (ColIndex - 1)) * 4, 0);
|
||
fread(&iVal, 4, 1, stream);
|
||
sgEdit->Cells[ColIndex][i + 1] = IntToStr(iVal);
|
||
}
|
||
break;
|
||
case 1: //浮点值 Float
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (ColIndex - 1)) * 4, 0);
|
||
fread(&fVal, 4, 1, stream);
|
||
sgEdit->Cells[ColIndex][i + 1] = FloatToStr(fVal);
|
||
}
|
||
break;
|
||
case 2: //文本 Text
|
||
fseek(stream, 0x4, 0);
|
||
fread(&iVal, 4, 1, stream);
|
||
dwRows = iVal;
|
||
fread(&iVal, 4, 1, stream);
|
||
dwCols = iVal;
|
||
fread(&iVal, 4, 1, stream);
|
||
dwRowLen = iVal;
|
||
fread(&iVal, 4, 1, stream);
|
||
dwTextLen = iVal;
|
||
|
||
dwTextStartPos = dwRows * dwRowLen + 20;
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (ColIndex - 1)) * 4, 0);
|
||
fread(&iVal, 4, 1, stream);
|
||
sgEdit->Cells[ColIndex][i + 1] = IntToStr(iVal);
|
||
if (dwTextStartPos + iVal < length)
|
||
{
|
||
fseek(stream, dwTextStartPos + iVal, 0);
|
||
fread(Txtbuf, 1, 255, stream);
|
||
//pTextPtr = pBuff + dwTextStartPos + lTemp;
|
||
sgEdit->Cells[ColIndex][i + 1] = Txtbuf;
|
||
}
|
||
else
|
||
{
|
||
sgEdit->Cells[ColIndex][i + 1] = "This Col Not Text!";
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
fclose(stream);
|
||
}
|
||
void __fastcall TFrmMain::Timer1Timer(TObject* Sender)
|
||
{
|
||
if (OpenOk)
|
||
{
|
||
lbOpState->Caption = "Open File Ok.";
|
||
}
|
||
else
|
||
{
|
||
lbOpState->Caption = "Open Now.....";
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//当前格子写入修改文件中
|
||
void __fastcall TFrmMain::N4Click(TObject* Sender)
|
||
{
|
||
if (!thOpen) return;
|
||
|
||
int iFileHandle; //文件句柄
|
||
char buf[4];
|
||
int iVal;
|
||
float fVal;
|
||
FILE* stream;
|
||
/*
|
||
if ((stream = fopen(CurrentOpenFile.c_str(), "r+"))
|
||
== NULL)
|
||
{
|
||
ShowMessage("打开文件出错");
|
||
return;
|
||
}
|
||
*/
|
||
iFileHandle = FileOpen(CurrentOpenFile, fmOpenRead | fmOpenWrite); //打开文件
|
||
|
||
switch (thOpen->ColType[sgEdit->Col])
|
||
{
|
||
case 0: //整型值
|
||
//for(int i=0;i<sgEdit->RowCount-1;i++){
|
||
/*
|
||
fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0);
|
||
iVal=StrToInt(sgEdit->Cells[sgEdit->Col][sgEdit->Row]);
|
||
memcpy(buf, &iVal, 4);
|
||
for(int i=0;i<4;i++)
|
||
fwrite(buf+i, 1, 1, stream);
|
||
*/
|
||
iVal = StrToInt(sgEdit->Cells[sgEdit->Col][sgEdit->Row]);
|
||
memcpy(buf, &iVal, 4);
|
||
FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0);
|
||
FileWrite(iFileHandle, buf, 4);
|
||
//}
|
||
break;
|
||
case 1: //浮点值
|
||
//fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0);
|
||
//fVal=StrToFloat(sgEdit->Cells[sgEdit->Col][sgEdit->Row]);
|
||
//fwrite(&fVal, 4, 1, stream);
|
||
fVal = StrToFloat(sgEdit->Cells[sgEdit->Col][sgEdit->Row]);
|
||
memcpy(buf, &fVal, 4);
|
||
FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0);
|
||
FileWrite(iFileHandle, buf, 4);
|
||
break;
|
||
case 2: //文本不写入
|
||
break;
|
||
}
|
||
|
||
// fclose(stream);
|
||
FileClose(iFileHandle);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::btTxtTypeClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == true)
|
||
{
|
||
AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini";
|
||
AnsiString SectionName = ExtractFileName(CurrentOpenFile);
|
||
TIniFile* ini;
|
||
ini = new TIniFile(iniSetFile);
|
||
ini->WriteInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 2);
|
||
delete ini;
|
||
thOpen->ColType[sgEdit->Col] = 2;
|
||
OpenFileCol(CurrentOpenFile, sgEdit->Col, 2);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::ToolButton3Click(TObject* Sender)
|
||
{
|
||
int OldCol;
|
||
int OldRow;
|
||
OldRow = sgEdit->Row;
|
||
OldCol = sgEdit->Col;
|
||
if (sgEdit->FixedCols == 1)
|
||
{
|
||
sgEdit->FixedCols = 2;
|
||
if (OldCol != 1)
|
||
sgEdit->Col = OldCol;
|
||
sgEdit->Row = OldRow;
|
||
}
|
||
else
|
||
{
|
||
sgEdit->FixedCols = 1;
|
||
sgEdit->Row = OldRow;
|
||
if (OldCol != 2)
|
||
sgEdit->Col = OldCol;
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::btRowSaveClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == false) return;
|
||
|
||
int iFileHandle; //文件句柄
|
||
char Txtbuf[255];
|
||
int iVal;
|
||
char buf[4];
|
||
float fVal;
|
||
FILE* stream;
|
||
long curpos, length;
|
||
DWORD dwRows, dwCols, dwRowLen, dwTextLen;
|
||
|
||
DWORD dwTextStartPos;
|
||
char* pTextPtr ;
|
||
|
||
|
||
//if ((stream = fopen(CurrentOpenFile.c_str(), "r+"))
|
||
// == NULL)
|
||
//{
|
||
// ShowMessage("打开文件出错");
|
||
// return;
|
||
//}
|
||
|
||
//curpos = ftell(stream);
|
||
//fseek(stream, 0L, SEEK_END);
|
||
//length = ftell(stream);
|
||
iFileHandle = FileOpen(CurrentOpenFile, fmOpenRead | fmOpenWrite); //打开文件
|
||
|
||
for (int i = 0; i < sgEdit->ColCount - 1; i++)
|
||
{
|
||
switch (thOpen->ColType[i])
|
||
{
|
||
case 0: //整型值 sgEdit->Row
|
||
//fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+i)*4, 0);
|
||
//iVal=StrToInt(sgEdit->Cells[i+1][sgEdit->Row]);
|
||
//fwrite(&iVal, 4, 1, stream);
|
||
iVal = StrToInt(sgEdit->Cells[i + 1][sgEdit->Row]);
|
||
memcpy(buf, &iVal, 4);
|
||
FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + i) * 4, 0);
|
||
FileWrite(iFileHandle, buf, 4);
|
||
break;
|
||
case 1: //浮点值
|
||
//fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+i)*4, 0);
|
||
//fVal=StrToFloat(sgEdit->Cells[i+1][sgEdit->Row]);
|
||
//fwrite(&fVal, 4, 1, stream);
|
||
fVal = StrToFloat(sgEdit->Cells[i + 1][sgEdit->Row]);
|
||
memcpy(buf, &fVal, 4);
|
||
FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + i) * 4, 0);
|
||
FileWrite(iFileHandle, buf, 4);
|
||
break;
|
||
case 2: //文本 不存
|
||
break;
|
||
}
|
||
}
|
||
//fclose(stream);
|
||
FileClose(iFileHandle);
|
||
ShowMessage("The " + IntToStr(sgEdit->Row) + " Row Write Ok!");
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::btColSaveClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == false) return;
|
||
|
||
int iFileHandle; //文件句柄
|
||
char Txtbuf[255];
|
||
int iVal;
|
||
char buf[4];
|
||
float fVal;
|
||
FILE* stream;
|
||
long curpos, length;
|
||
DWORD dwRows, dwCols, dwRowLen, dwTextLen;
|
||
|
||
DWORD dwTextStartPos;
|
||
char* pTextPtr ;
|
||
|
||
iFileHandle = FileOpen(CurrentOpenFile, fmOpenRead | fmOpenWrite); //打开文件
|
||
|
||
//if ((stream = fopen(CurrentOpenFile.c_str(), "r+"))
|
||
// == NULL)
|
||
//{
|
||
// ShowMessage("打开文件出错");
|
||
// return;
|
||
//}
|
||
|
||
//curpos = ftell(stream);
|
||
//fseek(stream, 0L, SEEK_END);
|
||
//length = ftell(stream);
|
||
|
||
|
||
switch (thOpen->ColType[sgEdit->Col])
|
||
{
|
||
case 0: //整型值
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
//fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0);
|
||
//iVal=StrToInt(sgEdit->Cells[sgEdit->Col][i+1]);
|
||
//fwrite(&iVal, 4, 1, stream);
|
||
iVal = StrToInt(sgEdit->Cells[sgEdit->Col][i + 1]);
|
||
memcpy(buf, &iVal, 4);
|
||
FileSeek(iFileHandle, 0x14 + (i * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0);
|
||
FileWrite(iFileHandle, buf, 4);
|
||
}
|
||
break;
|
||
case 1: //浮点值
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
//fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0);
|
||
//fVal=StrToFloat(sgEdit->Cells[sgEdit->Col][i+1]);
|
||
//fwrite(&fVal, 4, 1, stream);
|
||
fVal = StrToFloat(sgEdit->Cells[sgEdit->Col][i + 1]);
|
||
memcpy(buf, &fVal, 4);
|
||
FileSeek(iFileHandle, 0x14 + (i * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0);
|
||
FileWrite(iFileHandle, buf, 4);
|
||
}
|
||
break;
|
||
case 2: //文本 不存
|
||
break;
|
||
}
|
||
//fclose(stream);
|
||
|
||
FileClose(iFileHandle);
|
||
ShowMessage("The " + IntToStr(sgEdit->Col) + "Col Write Ok!");
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::btRowClearClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == false) return;
|
||
|
||
int iFileHandle; //文件句柄
|
||
char Txtbuf[255];
|
||
int iVal;
|
||
float fVal;
|
||
FILE* stream;
|
||
long curpos, length;
|
||
DWORD dwRows, dwCols, dwRowLen, dwTextLen;
|
||
|
||
DWORD dwTextStartPos;
|
||
char* pTextPtr ;
|
||
|
||
|
||
if ((stream = fopen(CurrentOpenFile.c_str(), "r+"))
|
||
== NULL)
|
||
{
|
||
ShowMessage("Open File Error!");
|
||
return;
|
||
}
|
||
|
||
curpos = ftell(stream);
|
||
fseek(stream, 0L, SEEK_END);
|
||
length = ftell(stream);
|
||
|
||
for (int i = 1; i < sgEdit->ColCount - 1; i++)
|
||
{
|
||
switch (thOpen->ColType[i])
|
||
{
|
||
case 0: //整型值 sgEdit->Row
|
||
//fseek(stream, 0x14+(sgEdit->Row*(sgEdit->ColCount-1)+i)*4, 0);
|
||
//iVal=StrToInt(sgEdit->Cells[i+1][sgEdit->Row]);
|
||
//fwrite(&iVal, 4, 1, stream);
|
||
sgEdit->Cells[i + 1][sgEdit->Row] = "0";
|
||
break;
|
||
case 1: //浮点值
|
||
//fseek(stream, 0x14+(sgEdit->Row*(sgEdit->ColCount-1)+i)*4, 0);
|
||
//fVal=StrToFloat(sgEdit->Cells[i+1][sgEdit->Row]);
|
||
//fwrite(&fVal, 4, 1, stream);
|
||
sgEdit->Cells[i + 1][sgEdit->Row] = "0";
|
||
break;
|
||
case 2: //文本 不存
|
||
break;
|
||
}
|
||
}
|
||
fclose(stream);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::btColClearClick(TObject* Sender)
|
||
{
|
||
if (OpenOk == false) return;
|
||
|
||
int iFileHandle; //文件句柄
|
||
char Txtbuf[255];
|
||
int iVal;
|
||
float fVal;
|
||
FILE* stream;
|
||
long curpos, length;
|
||
DWORD dwRows, dwCols, dwRowLen, dwTextLen;
|
||
|
||
DWORD dwTextStartPos;
|
||
char* pTextPtr ;
|
||
|
||
|
||
if ((stream = fopen(CurrentOpenFile.c_str(), "r+"))
|
||
== NULL)
|
||
{
|
||
ShowMessage("Open File Error!");
|
||
return;
|
||
}
|
||
|
||
curpos = ftell(stream);
|
||
fseek(stream, 0L, SEEK_END);
|
||
length = ftell(stream);
|
||
|
||
|
||
switch (thOpen->ColType[sgEdit->Col])
|
||
{
|
||
case 0: //整型值
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
//fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(ColIndex-1))*4, 0);
|
||
//iVal=StrToInt(sgEdit->Cells[ColIndex][i+1]);
|
||
//fwrite(&iVal, 4, 1, stream);
|
||
sgEdit->Cells[sgEdit->Col][i + 1] = "0";
|
||
}
|
||
break;
|
||
case 1: //浮点值
|
||
for (int i = 0; i < sgEdit->RowCount - 1; i++)
|
||
{
|
||
//fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(ColIndex-1))*4, 0);
|
||
//fVal=StrToFloat(sgEdit->Cells[ColIndex][i+1]);
|
||
//fwrite(&fVal, 4, 1, stream);
|
||
sgEdit->Cells[sgEdit->Col][i + 1] = "0";
|
||
}
|
||
break;
|
||
case 2: //文本 不存
|
||
break;
|
||
}
|
||
fclose(stream);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TFrmMain::ToolButton4Click(TObject* Sender)
|
||
{
|
||
AnsiString Cmd;
|
||
Cmd = "calc.exe";
|
||
WinExec(Cmd.c_str(), SW_SHOWNORMAL);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
|