덕분에 해결했습니다. 정말 감사드립니다.
장성호 님이 쓰신 글 :
: 음...
:
:
[문제]
: DrawCell 이벤트가 바생한 컴포넌트가 어느것인지 체크해야합니다.
:
: 만약
: DrawCell 이벤트로 넘어오는 ACol, ARow, Rect 가 StringGrid1 꺼인데..
: StringGrid2 에다가 그정보를 이용해서 그리면 이상한데 그리게 될것입니니다.
:
:
[답변]
:
: 아래 코드에 주석부분이 설명입니다.
:
:
: void __fastcall TForm3::DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,TGridDrawState State)
: {
: // FixedRows는 반복해서 변경할 필요없습니다. 폼생성시나 필요할때 한번만(디자인 타임에 해도 좋구요)
: // StringGrid1->FixedRows = 1;
: // StringGrid2->FixedRows = 1;
:
: // for문은 쓸데 없습니다.
: // Grid에서 화면에 보이는 Cell 이 100개이면 이벤트가 100번 발생합니다.
: // 파라메터로 넘어온 ACol , ARow에 대해서만 그려주면 됩니다.
:
: if(ACol != 1) return; //조건을 보니 Col이 1 인경우만 OwnerDraw하는것 같네요
:
: // Sender 가 현재 이벤트 발생한 Grid입니다.
: TStringGrid *pGrid = (TStringGrid *)Sender;
:
: if(PathCheck[i] == 1)
: {
: pGrid->Canvas->Font->Color = clRed;
: pGrid->Canvas->FillRect(Rect);
: pGrid->Canvas->TextOut(Rect.Left,Rect.Top,pGrid->Cells[ACol][ARow]);
: }
: else if(PathCheck2[i] == 2)
: {
: pGrid->Canvas->Font->Color = clBlack;
: pGrid->Canvas->FillRect(Rect);
: pGrid->Canvas->TextOut(Rect.Left,Rect.Top,pGrid->Cells[ACol][ARow]);
: }
:
: // Grid1과 Grid2의 조건이 다르다면
: if( Sender == StringGrid1 ) // 이런식으로 비교하시면 됩니다.
:
: }
:
:
:
: 그럼..
:
: 정현율 님이 쓰신 글 :
: : 소스가 너무 길어서... DrawCell 이벤트 관련 부분 소스입니다..
: :
: : void __fastcall TForm3::DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,TGridDrawState State)
: : {
: : StringGrid1->FixedRows = 1;
: : StringGrid2->FixedRows = 1;
: :
: : for(int i = 1 ; i <= StringGrid1->RowCount-1; i++)
: : {
: : if(ACol == 1 && ARow == i && PathCheck[i] == 1)
: : {
: : StringGrid1->Canvas->Font->Color = clRed;
: : StringGrid1->Canvas->FillRect(Rect);
: : StringGrid1->Canvas->TextOut(Rect.Left,Rect.Top,StringGrid1->Cells[ACol][ARow]);
: : break;
: : }
: : if(ACol == 1 && ARow == i && PathCheck2[i] == 2)
: : {
: : StringGrid1->Canvas->Font->Color = clBlack;
: : StringGrid1->Canvas->FillRect(Rect);
: : StringGrid1->Canvas->TextOut(Rect.Left,Rect.Top,StringGrid1->Cells[ACol][ARow]);
: : break;
: : }
: : }
: :
: :
: : for(int i = 1; i<= StringGrid2->RowCount-1; i++)
: : if(ACol == 1 & ARow == i && PathCheck3[i] == 3)
: : {
: : StringGrid2->Canvas->Font->Color = clRed;
: : StringGrid2->Canvas->FillRect(Rect);
: : StringGrid2->Canvas->TextOut(Rect.Left,Rect.Top,StringGrid2->Cells[ACol][ARow]);
: : break;
: : }
: : }
: :
: : 소스는 Path 에 등록된 경로에 파일이 존재하지 않으면 해당 셀의 글씨색을 빨간색으로 바꾸는 내용입니다.
: :
: : 첫번째 실행 화면 -- 오른쪽 StringGrid 에서 없는 파일 경로가 빨간색으로 잘 표시됨
: : 두번째 실행 화면 -- 왼쪽 StringGrid1 에서 없는 파일 경로가 빨간색으로 잘 표시됨
: :
: : 문제는 이때 오른쪽 StringGrid 에서 빨간색으로 표시되어있던 부분의 글씨가 짤린다고 해야하나... 아무튼 위치에 변동이 생깁니다...
: :
: : 제 생각으로는 한 DrawCell 이벤트에 StringGrid 두개를 모두 다 제어하도록 소스를 짜서 그런것 같긴 한데..
: :
: : DrawCell 이벤트는 Form의 변화 발생시점마다 실행이 되는 것으로 알고 있습니다.
: :
: : 그래서 grid마다 이벤트를 따로 줘야 하나 해서 해봤더니 되질 않네요...
: :
: : 더이상 방법을 못찾고 있습니다. 아시는 분 있으시다면 해결좀 부탁드려요...