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
[48875] Re:Re:Re:OnDrawCell Event에 대해서 질문좀..
또아리 [sky4242] 2171 읽음    2007-04-10 16:08
아..이건 좀 다른 질문이긴 하지만...ValueListEditor는 StringGrid를 상속받아서 만든 컴포넌트 같다는 생각이 들더라구요..OnDrawCell을 보면 StringGrid와 거의 흡사합니다... 혹시 스트링 그리드의 첨부 그림처럼...아예 클릭조차도 안되게.....0번 컬럼을 말이죠...저 파란색 바탕도 없고 포커스도 못갖도록 할 수는 없나요? 그냥 Read Only로요..아무리 해도 저 파랑 셀 바탕은 없앨수가 없어서..OnDraw에서 White로 그려줘도..포커스를 갖아서..별로 소용이 없는거 같고..
옵션중에 doKeyFixed라는 옵션이 있는데 이걸...Value컬럼에도 적용할 수 있을까요? ...적용하는법이 따로 있는지 좀 알려주세요...

또아리 님이 쓰신 글 :
: 네..한개는 아무런 문제 없이 돌아가네요..
:
: 현덕0 님이 쓰신 글 :
: : 1개만 가지고 테스트 하실때는 문제가 없었나요?
: :
: : 또아리 님이 쓰신 글 :
: : : Form안에 4개의 TValueListEditor를 놓고...각 TValueListEditor로 부터 OnDrawEvent를 호출하여...ValueListEditro를 다시 그리는데요...이상하게 그려집니다. 그려지지도 않을뿐더러...에러 메세지를 뿜어내는군요..(Index out of 8) 인덱스값이 오류라는데..데이터는 정상적으로 들어오고 있구요...인덱스값이 틀린게 아닌데..동시에 4개를 그려서 그런지 잘 안그려지더군요...그래서 OnDrawCell Event를 막아봤더니 정상동작되더라구요....이유가 무엇인지요? OnDrawCell Event를 동시에 여러개를 빠르게 그릴때 문제가 발생할 수 있는건가요?
: : :
: : : //------------------- 아래 DrawCell을 동시에 4개부르는데요...
: : :
: : : // ValueListEditor  Draw Cell Event    -- for INVERTER2
: : : void __fastcall TForm1::INV2_DataListDrawCell(TObject *Sender, int ACol,
: : :       int ARow, TRect &Rect, TGridDrawState State)
: : : {
: : :     // TBitmap 포인터 생성 그래픽 객체 저장
: : : //    Graphics::TBitmap       *BM_Buff = new Graphics::TBitmap();
: : : //    TValueListEditor *pGrid = dynamic_cast<TValueListEditor *>(Sender); // 현재 Sender로 들어오는 Object
: : : //    // Position을 위한 X, Y 그리고 Rect Area Text높이를 결정하기 위해서 여기에 변수 설정
: : : //    int     CenterX = 0;
: : : //    int     CenterY = 0;
: : : //    TRect   Area;
: : : //    int     TextHeight;
: : : //
: : : //    // 기본 텍스트 Align은 Center로 잡는다.
: : : //    // ValueListEditor의 기본 상속은 StringGrid로 부터 받아오기 때문에 특정라인 또는
: : : //    // 전체 셀에 대한 정보를 OnDrawCell에서 다시 그린다.
: : : //    unsigned oldalign = SetTextAlign(pGrid->Canvas->Handle, TA_CENTER);
: : : //
: : : //    // 만약에 State가 선택된상태 (셀이 선택된 상태라면 )
: : : //    if(ARow !=0) {
: : : //
: : : //        if( State.Contains(gdSelected) )
: : : //        {
: : : //            // Draw Canvas ( 바탕을 화이트로 바꾸고 FontColor = clRed로 바꾼다.)
: : : //            pGrid->Canvas->Brush->Color = clWhite;
: : : //            pGrid->Canvas->Pen->Color = clWhite;
: : : //            pGrid->Canvas->Font->Color = clRed;
: : : //            pGrid->Canvas->Font->Style = TFontStyles();
: : : //        }else {
: : : //            // Draw Canvas ( 바탕을 화이트로 바꾸고 FontColor = clBlack로 바꾼다.)
: : : //            // 선택되지 않았을 때 ACol > 0 크면, 즉 타이틀 바가 아니면
: : : //            pGrid->Canvas->Brush->Color = clWhite;
: : : //            pGrid->Canvas->Pen->Color = clWhite;
: : : //            pGrid->Canvas->Font->Color = clBlack;
: : : //            pGrid->Canvas->Font->Style = TFontStyles();
: : : //
: : : //        }
: : : //    }
: : : //
: : : //    // 여기서 Text크기를 결정하고 해당 위치에 매칭 시킨다.
: : : //    TextHeight = pGrid->Canvas->TextHeight(INV1_DataList->Cells[ACol][ARow]);
: : : //    pGrid->Canvas->TextRect( Rect
: : : //                                , (Rect.left + Rect.right)/2
: : : //                                , Rect.top + (Rect.Height()/2 - TextHeight/2)
: : : //                                , pGrid->Cells[ACol][ARow]);
: : : //
: : : //    SetTextAlign(pGrid->Canvas->Handle, oldalign);
: : : //
: : : //
: : : //    // 이 이하의 Acol에 대하여 switch문으로 처리할 것.
: : : //    // 만약에 컬럼이 1보다 작거나 같고  로우가 0이라면 ( 즉 타이틀 바를 뜻함.)
: : : //    if ((ACol<=1) && (ARow == 0))
: : : //    {
: : : //        // 타이틀바의 맨처음 컬럼에 대한 이미지 리스트에 대해서 ImageList로 부터 Image를 가져온다.
: : : //        if ((ACol == 0) && (ARow == 0))
: : : //        {
: : : //            ImageList1->GetBitmap(0, BM_Buff);
: : : //        }else {
: : : //            ImageList1->GetBitmap(1, BM_Buff);
: : : //        }
: : : //
: : : //        CenterX = Rect.Left;
: : : //        CenterY = Rect.Top;
: : : //        // 여기서 이미지 리스트로 부터 가져온 버퍼이미지를 여기에 매칭 시킨다.
: : : //        pGrid->Canvas->Draw(CenterX, CenterY, BM_Buff);
: : : //    }

+ -

관련 글 리스트
48864 OnDrawCell Event에 대해서 질문좀.. 또아리 1544 2007/04/10
48873     Re:OnDrawCell Event에 대해서 질문좀.. 현덕0 1192 2007/04/10
48874         Re:Re:OnDrawCell Event에 대해서 질문좀.. 또아리 1132 2007/04/10
48875             Re:Re:Re:OnDrawCell Event에 대해서 질문좀.. 또아리 2171 2007/04/10
48880                 Re:Re:Re:Re:OnDrawCell Event에 대해서 질문좀.. 또아리 1654 2007/04/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.