|
아래와 같이 문제가 해결이 된 듯 하네요.
어제 마지막에 말씀해주신 IntToStr로 바꾸라고 하신 거 있죠?
StrToInt로 바꾸니깐 char형으로 전환이 되더군요.( *(Edit5->Text.c_str())와는 달리 결과가 제대로 나옮)
제가 보기엔 어제 말씀 하실때 StrToInt를 IntToStr로 잘못 표기를 하신듯...^^ 감사합니다.
그래서 오늘 아침에 드디어 99% 정도 해결이 된 듯 한데요...
근데 딱 한가지 문제가 있는 듯....
뭐냐 하면 아래 구문에서요.........
else if(Table1->FieldByName("Name")->AsString=="CCD")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<1);
CCD항목을 한번씩 클릭을 하면 Edit5->Text값이 0부터 3까지 순차 증가하면서 바뀝니다.
그러므로 TotalData[2]에 저장되는 값은 0000 0000-> 0000 0010-> 0000 0100-> 0000 0110로 바뀌어야 하는데요.....두번째에서 세번째로 바뀔때 0000 0010->0000 0100으로 바뀌어야 하는데,
0000 0010->0000 0110로 바뀌더군요.
이유인 즉, 두번째 비트의 1값이 살아 있는상태에서 값이 바뀌는 거죠.(원래는 0이 되어야 하는데..)
그러니간 원래는 두번째 비트는 0으로 되어야 하는 거죠.
그래서 static char TotalData[3]를 char TotalData[3]으로 바꾸니 결과값이 제대로 나옵니다.
근데 이때의 문제점은 전의 결과 값이 누적이 되어야 하는데 누적이 안 된다는 거죠.
그래서 인데 혹 Edit나 함수중에서 여타 자리수를 지정해서 출력해주는 속성이 없나요?
가령 printf("%02d",i)와 같이 02로서 자리수를 지정해서 출력해 주는 속성이 있다면 될 것 같기도 한데요....^^
바쁘신데 수고스럽게 해서 죄송하구요....
좋은 하루 되세요...............그 동안 감사 했습니다........
static char TotalData[3]={0,0,0};//,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
// char cBaseData=Edit5->Text;
Table1->Edit();
if(Table1->TableName=="fix.db")
{
if(strchr(Table1->FieldByName("50")->AsString.c_str(),'&'))
{
if(UpDown1->Position >= ( pow(2,StrToInt(Table1->FieldByName("Bit")->AsString))))
{
//ShowMessage("This is FF more value. ^.^");
Edit5->Text=0;
UpDown1->Position=0;
}
else
{
Edit5->Text=AnsiString::IntToHex(UpDown1->Position,1);
}
Table1->FieldByName("50")->AsString="&H"+Edit5->Text;
}
else
{
if(UpDown1->Position >= ( pow(2,StrToInt(Table1->FieldByName("Bit")->AsString))))
{
Edit5->Text=0;//2^StrToInt(Table1->FieldByName("Bit")->AsString)-1;
UpDown1->Position=0;
if(Table1->FieldByName("Name")->AsString=="NTPAL")
TotalData[2]=TotalData[2] & ~(1<<0);
else if(Table1->FieldByName("Name")->AsString=="CCD")
TotalData[2]=TotalData[2] & ~(0x03<<1);
else if(Table1->FieldByName("Name")->AsString=="YDOUT")
TotalData[2]=TotalData[2] & ~(1<<3);
else if(Table1->FieldByName("Name")->AsString=="UVDOUT")
TotalData[2]=TotalData[2] & ~(1<<4);
else if(Table1->FieldByName("Name")->AsString=="REC601")
TotalData[2]=TotalData[2] & ~(1<<5);
else if(Table1->FieldByName("Name")->AsString=="DSYNC")
TotalData[2]=TotalData[2] & ~(1<<6);
else if(Table1->FieldByName("Name")->AsString=="SG135")
TotalData[2]=TotalData[2] & ~(1<<7);
}
else
{
Edit5->Text=UpDown1->Position;
if(Table1->FieldByName("Name")->AsString=="NTPAL")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<0);
else if(Table1->FieldByName("Name")->AsString=="CCD")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<1)
else if(Table1->FieldByName("Name")->AsString=="YDOUT")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<3);
else if(Table1->FieldByName("Name")->AsString=="UVDOUT")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<4);
else if(Table1->FieldByName("Name")->AsString=="REC601")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<5);
else if(Table1->FieldByName("Name")->AsString=="DSYNC")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<6);
else if(Table1->FieldByName("Name")->AsString=="SG135")
TotalData[2]=TotalData[2] | ((char)StrToInt(Edit5->Text)<<7);
}
Table1->FieldByName("50")->AsString=Edit5->Text;
}
|