|
그런 내용을 구현하시려면..
파서쪽 공부하셔야 할겁니다.
도마뱀 님이 쓰신 글 :
: 답변 감사합니다. 아직까지 제가 모르는게 너무나도 많네요...
: 추가 질문인데요...
: 프로그램을 구현하는 방법에는 여러가기가 있겠지만,
: 여러 고수님들이 아시는 더 좋은방법이 있을꺼 같아서 질문드리는데요...
: Visual C++ 이나 C++ 빌더의 코드에디터(명칭이 맞는지 잘 모르겠습니다)에서
: 키워드(if, else, switch등등)를 입력하게 되면 색깔이 바뀌거나,
: 글자체가 바뀌는데 이것은 어떻게 구현하는 겁니까....
: 제 생각에는 단순히 파일의 처음부터 끝까지....
: 키워드와 하나하나 반복해서 다 비교하는 것인데요....
: 이건 좀 너무 무식한 방법인것 같기도 하구 해서요...
: 고수님들이 좋은 방법을 아실꺼 같아서...질문드립니다.
:
: 조준회 님이 쓰신 글 :
: : 빌더의 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++;
: : : }
: : : }
: : : }
: : : }
: : :
: : : 오류가 나는곳의 코드와 같은코드가 다른부분에도 있는데,
: : : 그부분에서는 오류가 발생하지 않습니다.
: : : 그리고 메모컴포넌트에 글자마다 색을 다르게 나타낼려고 하는데,
: : : 메모컴포넌트의 폰트 컬러를 바꾸어주면 메모컴포넌트 전체의 글자색이 다바뀌는데
: : : 어떻게 나타내야하는지도 좀 알려주시면 고맙겠습니다.
: : :
: : :
|