|
보연님 안녕하세요 경호입니다.
음 값이 재대로 안들어 간다는 것이 스트링 그리드의 셀에 값들이
안들어 간다는 것이지요. 아래의 소스 부분을 보면 그리드의 모든 셀들이 같은
값을 표시하는 것은 당연합니다. 추가하신 for문에서 그리 처리되도록 하셨더군요
for(i=0; i<len; i++) {
if(ch[i]<0x10 || ch[i]>0x7f)
{
sprintf(tmp2, "퍼센트 엑스", ch[i]); // <- 이 부분 때문에 안 올려지는 것 같아
strcat(tmp, tmp2); // '퍼센트 엑스'이라고 썼습니다.
}
else {
sprintf(tmp2, "퍼센트 씨", ch[i]); // <- 이 부분도 마찬가지...
strcat(tmp, tmp2);
}
:
: //----------------------------------------------- 여기부터 ~
:
: for(int y=1; y<17; y++)
: for(int x=1; x<4; x++)
: StringGrid1->Cells[x][y]=IntToStr(ch[i]);
:
: //------------------------------------ 여기까지가 제가 넣은 부분이에요.
:
}
==> for문안에서 다시 for문이 돌면서 무조건 처음의 셀부터 마지막 셀까지
해당하는 ch[i]값을 집어넣구 있군요 ^^ 그럼
for(int y=1; y<17; y++)
: for(int x=1; x<4; x++)
: StringGrid1->Cells[x][y]=IntToStr(ch[i]);
에서 ch[i]값은 변하지 않는 하나의 값이겠죠 ^^
그러므로 님이 하시고 싶은 일을 하실려면
StringGrid1->Cells[i/17+1][i%17+1]=IntToStr(ch[i]);
하시면 원하는 셀에 들어갈거예요 ... 당근 for문은 없에시고요...
==> 음 그런데 여기서 이렇게 하면 한번밖에 못볼텐데 쩝 괜찮으신 것인지
여러프레임을 계속 받는다면 소스의 수정이 불가피 하겠죠...
스트링 그리드의 전체셀이 다 차면 저장하고 클리어 하는 루틴여 ^^
: if(PrivMsg.Length() + strlen(tmp) > 400)
: PrivMsg = PrivMsg.SubString(PrivMsg.Length() -
: (400 - strlen(tmp)), 400 - strlen(tmp));
:
: PrivMsg = PrivMsg + AnsiString(tmp);
: edtReceived->Text = PrivMsg;
==> 이부분은 받은 메세지의 길이와 저장한 메세지의 길이를 더해서 일정한
크기가 넘으면 메세지의 크기를 조정해서 일정한 간격으로 자르기 위한 루틴입니다.
즉 줄맞춤을 위한 부분이지요...
PrivMsg = PrivMsg.SubString(PrivMsg.Length() -
: (400 - strlen(tmp)), 400 - strlen(tmp));
==> 부분은 헬프를 찾아보시면 알겠지만 원하는 스트링의 해당부분의 포인터를
가져오는 부분이랍니다. 그래서 원하는 위치에서 부터 스트링을 잘라가지고
올수 있지요...
음 도움이 되셨나 모르겠네요 ...
하시다가 모르시는게 있으시면 리플달아 주세요 ^^
|