C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22838] Re:C소스파일을 읽어서 메모컴포넌트에 나타내려고 하는데요...
조준회 [] 575 읽음    2002-11-25 14:44
빌더의 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++;
:                         }
:                 }
:         }
: }
:
: 오류가 나는곳의 코드와 같은코드가 다른부분에도 있는데,
: 그부분에서는 오류가 발생하지 않습니다.
: 그리고 메모컴포넌트에 글자마다 색을 다르게 나타낼려고 하는데,
: 메모컴포넌트의 폰트 컬러를 바꾸어주면 메모컴포넌트 전체의 글자색이 다바뀌는데
: 어떻게 나타내야하는지도 좀 알려주시면 고맙겠습니다.
:
:

+ -

관련 글 리스트
22828 C소스파일을 읽어서 메모컴포넌트에 나타내려고 하는데요... 도마뱀 551 2002/11/25
22838     Re:C소스파일을 읽어서 메모컴포넌트에 나타내려고 하는데요... 조준회 575 2002/11/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.