|
빌더의 String은 2G까지의 문자열을 처리할수 있습니다.
궃이 리스트를 사용하지 않아도 왠만한 것은 충분히 처리 가능합니다.
다만 문제가 되는 것은 memo 컴포넌트는 64Kb까지밖에 처리할수 없습니다.
(지금은 수정됐는지 모르겠군요.)
그래서 보통은 리치컴포넌트를 사용하고요..
리치를 쓰는 경우는 selstart,sellength, settestattr을 사용해서
각 문자별로 컬러를 지정할 수 있습니다.
도마뱀 님이 쓰신 글 :]
: C 소스파일을 읽어서 메모컴포넌트에 나타내려고 하는데요....
: 나타낼때 키워드인경우에는 글자의 색을 다르게 나타내려고 합니다.
: 파일을 읽은후에 파일의 내용중...
: 문자가 아닌부분마다 나누어서 링크드리스트로 나타내려고 하는데...
: 컴파일시에는 에러가 없고, 실행시에 오류가 나는데...
: 오류난 부분은 찾았는데 뭐가 잘못됐는지 잘 모르겠습니다.
:
: static int iFileHandle;
: static int iFileLength;
: static int iBytesRead;
: char *pszBuffer;
: struct ccon
: {
: int kind;
: char *str;
: ccon *next;
: }*start, *p;
:
:
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
: int k=0, first=0;
: for(int i=0;i<iFileLength;i++)
: {
: if(pszBuffer[i]=='#')
: {
: if(i==k)
: {
: if(first==0)
: {
: p=new ccon;
: start=p;
: first=1;
: }
: else
: {
: p->next=new ccon;
: p=p->next;
: }
: p->next=NULL;
: p->str=new char[2];
: p->str[0]='#';
: p->str[1]=NULL;
: k++;
: }
: }
: else if((pszBuffer[i]>='a' && pszBuffer[i]<='z') ||(pszBuffer[i]>='0' && pszBuffer[i]<='9') ||pszBuffer[i]=='_');
:
: else
: {
:
: if(i!=k)
: {
: i--;
: p->next=new ccon;
: p=p->next;
: p->next=NULL;
: p->str=new char[i-k+2];
: int j;
: for(j=0;k<=i;j++,k++)
: {
: p->str[j]=pszBuffer[k];
: }
: p->str[++j]=NULL;
: }
: else
: {
: p->next=new ccon;
: p=p->next;
: p->next=NULL;
: p->str=new char[2]; //<<==이부분에서 오류가 납니다.
: p->str[0]=pszBuffer[k++];
: p->str[1]=NULL;
: k++;
: }
: }
: }
: }
:
: 오류가 나는곳의 코드와 같은코드가 다른부분에도 있는데,
: 그부분에서는 오류가 발생하지 않습니다.
: 그리고 메모컴포넌트에 글자마다 색을 다르게 나타낼려고 하는데,
: 메모컴포넌트의 폰트 컬러를 바꾸어주면 메모컴포넌트 전체의 글자색이 다바뀌는데
: 어떻게 나타내야하는지도 좀 알려주시면 고맙겠습니다.
:
:
|