📄 vdatadict.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "VDataDict.h"
#include "func.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "BillBaseForm"
#pragma link "DateEdit"
#pragma link "fpanel"
#pragma link "SDComboBox"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma resource "*.dfm"
TfrmVDataDict *frmVDataDict;
//---------------------------------------------------------------------------
__fastcall TfrmVDataDict::TfrmVDataDict(TComponent* Owner)
: TBillBaseForm(Owner,euSdView,"")
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::InitEditControl()
{
ClientGroup->AddComponent(1,false,false,true, FloatPanel1,FloatPanel1->Name);
ClientGroup->AddComponent(2,false,false,true,FloatPanel2,FloatPanel2->Name);
ClientGroup->AddComponent(1,false,true,false,seViewName,seViewName->Name);
FillComboBox(scViewClassID,"SELECT ClassName=ClassID+Space(18-len(ClassID))+'|'+ClassName,CLASSID FROM SDCLASS","ClassName","CLASSID");
scVFieldType->ClearAll();
scVFieldType->AddItems("C-字符型","C");
scVFieldType->AddItems("F-浮点型","F");
scVFieldType->AddItems("L-长整型","L");
scVFieldType->AddItems("N-整型","N");
scVFieldType->AddItems("S-短整型","S");
scVFieldType->AddItems("D-日期型(字符)","D");
scVFieldType->AddItems("B-布尔型","B");
scVFieldType->AddItems("M-文本型","M");
scVFieldType->AddItems("T-时间型","T");
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::ClearControl(int Section,bool BringToNext)
{
if (Section==1)
{
if (! BringToNext)
{
seViewName->Text="";
seViewDesc->Text="";
scViewClassID->ItemIndex=0;
lbViewDate->Caption=FormatDateTime("YYYY-MM-DD",Date());
memViewWhere->Text="";
memViewGroup->Text="";
memViewTable->Text="";
memViewOrder->Text="";
}
sgVDataDict->RowCount=1;
if(seViewName->Enabled==true && FloatPanel1->Enabled==true)
seViewName->SetFocus();
}
else if (Section==2)
{
if (!BringToNext)
{
seVFieldNo->Text=AnsiString(comServer->ItemCount+1);
seVFieldName->Text="";
seVFieldDesc->Text="";
scVFieldType->ItemIndex=0;
seVFieldWidth->Text="18";
seVFieldScale->Text="0";
memVFieldMemo->Text="";
memVFieldExpr->Text ="";
chkVFieldFlg->Checked=false;
// if(seVFieldNo->Visible==true&&FloatPanel2->Visible==true)
// seVFieldNo->SetFocus();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::GetDataFromComObject(int Section)
{
AnsiString mStr;
if(Section==1){
seViewName->Text=GetHeadValue(fiViewName);
seViewDesc->Text=GetHeadValue(fiViewDesc);
scViewClassID->LocateKey(GetHeadValue(fiViewClassID));
lbViewDate->Caption=GetHeadValue(fiViewDate);
memViewWhere->Text=GetHeadValue(fiViewWhere);
memViewGroup->Text=GetHeadValue(fiViewGroup);
memViewTable->Text=GetHeadValue(fiViewTable);
memViewOrder->Text=GetHeadValue(fiViewOrder);
}
else{
seVFieldNo->Text=GetDetailValue(fiVFieldNo);
seVFieldName->Text=GetDetailValue(fiVFieldName);
seVFieldDesc->Text=GetDetailValue(fiVFieldDesc);
scVFieldType->LocateKey(GetDetailValue(fiVFieldType));
seVFieldWidth->Text=GetDetailValue(fiVFieldWidth);
seVFieldScale->Text=GetDetailValue(fiVFieldScale);
memVFieldMemo->Text=GetDetailValue(fiVFieldMemo);
chkVFieldFlg->Checked=GetDetailValue(fiVFieldFlg)=="1";
memVFieldExpr->Text=GetDetailValue(fiVFieldExpr);
memVFieldMemo->Text=GetDetailValue(fiVFieldMemo);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::SendDataToComObject(int Section)
{
if (Section==1){
SetHeadValue(fiViewName,seViewName->Text );
SetHeadValue(fiViewDesc,seViewDesc->Text);
SetHeadValue(fiViewClassID,scViewClassID->ItemData[1]);
SetHeadValue(fiViewWhere,memViewWhere->Text);
SetHeadValue(fiViewGroup,memViewGroup->Text);
SetHeadValue(fiViewTable,memViewTable->Text);
SetHeadValue(fiViewOrder,memViewOrder->Text);
}
else{
SetDetailValue(fiVFieldView,seViewName->Text);
SetDetailValue(fiVFieldNo,seVFieldNo->Text);
SetDetailValue(fiVFieldName,seVFieldName->Text);
SetDetailValue(fiVFieldDesc,seVFieldDesc->Text);
SetDetailValue(fiVFieldType,scVFieldType->ItemData[1]);
SetDetailValue(fiVFieldWidth,seVFieldWidth->Text);
SetDetailValue(fiVFieldScale,seVFieldScale->Text);
SetDetailValue(fiVFieldMemo,memVFieldMemo->Text);
SetDetailValue(fiVFieldType,scVFieldType->ItemData[1]);
SetDetailValue(fiVFieldFlg,chkVFieldFlg->Checked ? "1":"0");
SetDetailValue(fiVFieldExpr,memVFieldExpr->Text);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::WaitUserInput(int Section)
{
if (Section ==1)
{
if(seViewName->Enabled)
seViewName->SetFocus();
}
else
{
sgVDataDict->Visible=false;
sgVDataDict->Align=alNone;
FloatPanel2->Visible=true;
FloatPanel2->Align=alClient;
seVFieldNo->SetFocus();
if(CurrentState==caAddDetail||CurrentState==caAddBill)
btnOK->Enabled=true;
else
btnOK->Enabled=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::RefreshGridData(int mAction)
{
AnsiString ItemStr;
int i;
switch(mAction){
case 0:
ItemStr="\t"+GetDetailValue(fiVFieldNo)+"\t"+GetDetailValue(fiVFieldName)+"\t"+
GetDetailValue(fiVFieldDesc)+"\t"+GetDetailValue(fiVFieldType)+"\t"+GetDetailValue(fiVFieldWidth)+"\t"+
GetDetailValue(fiVFieldScale)+"\t"+((GetDetailValue(fiVFieldFlg)=="1")?AnsiString("*"):AnsiString(""));
sgVDataDict->AddItem(ItemStr);
break;
case 1:
i=sgVDataDict->Row;
ItemStr="\t"+GetDetailValue(fiVFieldNo)+"\t"+GetDetailValue(fiVFieldName)+"\t"+
GetDetailValue(fiVFieldDesc)+"\t"+GetDetailValue(fiVFieldType)+"\t"+GetDetailValue(fiVFieldWidth)+"\t"+
GetDetailValue(fiVFieldScale)+"\t"+((GetDetailValue(fiVFieldFlg)=="1")?AnsiString("*"):AnsiString(""));
sgVDataDict->RemoveItem(i);
sgVDataDict->AddItem(ItemStr,i);
break;
case 2:
sgVDataDict->RemoveItem(sgVDataDict->Row);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::DisplayBill()
{
GetDataFromComObject(1);
FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::GetBill(AnsiString BillID)
{
int eRow;
eRow=comServer->Find("ViewName='"+BillID+"'");
if (eRow>0) //found this bill
{
DisplayBill();
}
else
if (ShowMessageWindow("在数据库中没有查到记录:"+BillID+",要增加吗?",mwsConfirmation)==IDYES)
{
AddHeadRecord();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::FillGridWithData()
{
int i;
AnsiString ItemStr;
sgVDataDict->RowCount=1;
if(comServer->RecordCount<1)
return;
for (i=0;i<comServer->ItemCount;i++)
{
comServer->LocateItemByIndex(i);
RefreshGridData(0);
}
comServer->LocateItemByIndex(0);
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmVDataDict::GetHeadValue(int Index)
{
WideString S;
S = ReadFieldValue(comServer,Index);
return S;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmVDataDict::GetDetailValue(int Index)
{
WideString S;
S = ReadItemValue(comServer,Index);
return S;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::SetHeadValue(int Index,AnsiString Value)
{
WriteFieldValue(comServer,Index,WideString(Value));
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::SetDetailValue(int Index,AnsiString Value)
{
WriteItemValue(comServer,Index,WideString(Value));
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::FormShow(TObject *Sender)
{
// InitEditControl();
ClearControl(1,false);
ClearControl(2,false);
TBillBaseForm::MoveToFirst();
ChangeToBrowseState(true);
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::sgVDataDictSelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if (ARow == 0)
{
return;
}
comServer->LocateItemByKey(WideString(sgVDataDict->TextMatrix[ARow][1]));
if (!comServer->Eof)
{
GetDataFromComObject(2);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::sgVDataDictDblClick(TObject *Sender)
{
int iRow;
iRow=sgVDataDict->Row;
if (iRow == 0)
{
return;
}
comServer->LocateItemByKey(WideString(sgVDataDict->TextMatrix[iRow][2]));
if (!comServer->Eof)
{
GetDataFromComObject(2);
sgVDataDict->Visible=false;
FloatPanel2->Visible=true;
btnCancel->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::ChangeToBrowseState(bool Browse)
{
FloatPanel2->Visible=false;
FloatPanel2->Align=alNone;
btnOK->Enabled=false;
btnCancel->Enabled=false;
sgVDataDict->Visible=true;
sgVDataDict->Align=alClient;
// sgVDataDict->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::btnOKClick(TObject *Sender)
{
if ((CurrentState==caAddDetail)||(CurrentState==caAddBill))
{
if(DetailState==caAddDetail)
comServer->AddItem();
SendDataToComObject(2);
comServer->AddToObject();
ClearControl(2,false);
}
else
ChangeToBrowseState(false);
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::btnCancelClick(TObject *Sender)
{
CancelChange();
}
//---------------------------------------------------------------------------
int __fastcall TfrmVDataDict::GetMaxItemLineValue()
{
comServer->LocateItemByIndex(comServer->ItemCount-1);
return StrToInt(GetDetailValue(fiSogdLine))+1;
}
void __fastcall TfrmVDataDict::RefreshUpdateData(int MsgSrc,int MsgType)
{
}
void __fastcall TfrmVDataDict::scVFieldTypeExit(TObject *Sender)
{
switch(scVFieldType->ItemIndex)
{
case 0:
seVFieldWidth->Enabled=true;
seVFieldWidth->Text="18";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 1:
seVFieldWidth->Enabled=true;
seVFieldWidth->Text="12";
seVFieldScale->Enabled=true;
seVFieldScale->Text="0";
break;
case 2:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="10";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 3:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="5";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 4:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="1";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 5:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="10";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 6:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="1";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 7:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="10";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
case 8:
seVFieldWidth->Enabled=false;
seVFieldWidth->Text="8";
seVFieldScale->Enabled=false;
seVFieldScale->Text="0";
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmVDataDict::seViewNameKeyDown(TObject *Sender,
WORD &Key, TShiftState Shift)
{
if(Key==13 && CurrentState==caNormal)
{
comServer->LocateByKey(WideString(seViewName->Text));
DisplayBill();
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -