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
[66388] Re:Re:Re:Re: 님~ 아직 파일 안올렸네여~
이길남.HoPe [miru0418] 1276 읽음    2012-02-24 09:22
제가 쓰는 일부분을 발췌한 부분입니다.

응용해서 사용하세요. ^^;

참고로 깜박임은 Grid->DoubleBuffer = True 해주면 많이 해소 됩니다. (단, 메모리가 늘겠죠... ^^;)

void __fastcall TFSub04n02::Grid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
    TStringGrid *grid = dynamic_cast(Sender);
    if(grid == NULL)                                        return;

    TCanvas* canvas = grid->Canvas;
    TRect rect = grid->CellRect(ACol, ARow);

    canvas->Font->Assign(grid->Font);
    canvas->Pen->Color = clBlack;

    canvas->Brush->Color = (!ARow) ? TColor(clGray) : TColor(0x00A7A7A7);
    canvas->FillRect(rect);

    if(ACol == grid->ColCount -1)   rect.right--;
    if(ARow == grid->RowCount -1)   rect.bottom--;
    if(ARow == grid->RowCount -1 || grid->RowCount == 1)
    {
        canvas->MoveTo(rect.left,  rect.bottom);
        if(rect.Height() >= grid->DefaultRowHeight - 1)
        {
            canvas->MoveTo(rect.right, rect.bottom);
            canvas->LineTo(rect.left,  rect.bottom);
        }
    }
    else
    {
        canvas->MoveTo(rect.left,  rect.bottom);
    }
    canvas->LineTo(rect.left,  rect.top);
    canvas->LineTo(rect.right, rect.top);
    if(ACol == grid->ColCount -1 || grid->RowCount == 1)    canvas->LineTo(rect.right, rect.bottom);

    AnsiString str = grid->Cells[ACol][ARow];
/*
    grid->Cells[ACol][ARow] 대신 메모리(변수)값을 부르면 될것입니다.
*/
    if(ARow && ACol == 1)
    {
        switch(str.ToIntDef(0))
        {
            case  1:str = "TRAY 삽입";      break;
            case  2:str = "TRAY 배출";      break;
            case  3:str = "AUTO SHIP";      break;
            default:str = " UN-KNOWN";      break;
        }
    }

    TSize size = canvas->TextExtent(str);
    if(!ARow || ACol != 2)  canvas->TextOut(rect.left + (rect.Width() - size.cx)/2, rect.top + (rect.Height() - size.cy)/2, str);
    else                    canvas->TextOut(rect.left + 10, rect.top + (rect.Height() - size.cy)/2, str);
}
//---------------------------------------------------------------------------



김태우 님이 쓰신 글 :
: 아..그렇군요...
:
: 그래서 다시 OnDrawCell 를 호출하게 되어서...
:
: 깜빡임?? 같은 현상이 나오는거였던거군요...???
:
: OnDrawCell 구현 해놓은 예제라도 좀 보여주실수 있나요....
:
: 메모리에 둔다는건 XLSheet.OlePropertyGet("Cells", j , i).OlePropertyGet("Value");
:
: 이런식 말고 읽어드린 자료를 배열이나 이런곳에 할당해놓고..
:
: 그걸 직접 Drawing 하라는 말씀이신지...
:
: 예제좀..ㅜㅜ
:
:
: 이길남.HoPe 님이 쓰신 글 :
: : 제가 타이머나 쓰레드를 사용하라는 주된 이유는
: :
: : 정보를 한번에 읽어오는데 프로그램이 정지되는 것과 같은 현상을 방지하기 위해서 입니다.
: :
: : 프로그램이 정지된것과 비슷한 현상을 방지하려면,
: :
: : 타이머를 사용해서 조금씩 데이터를 갱신하는 방법밖에 없다고 생각됩니다.
: :
: : 또한, 인디님께서 말씀하신 OnDrawCell 방법도 좋습니다.
: :
: : 다만, 주의 하실점은 데이터를 모두 별도의 메모리에 두어서 직접 Drawing을 하셔야됩니다.
: :
: : 만약, "SringGrid1->Cells[ACol][ARow] = 데이터" 이런식의 작성을 하면,
: :
: : 다시 OnDrawCell을 호출하게 되므로 역효과가 나타납니다.
: :
: : 또한, OnDrawCell 부분에서 엑셀파일을 계속해서 열고 닫으면 외부에서 엑셀 파일을 열거나 닫으면
: :
: : 공유 위반 에러가 날듯합니다.
: :
: : (요 부분은 직접 테스트를 하지 못하였습니다. 다만, 염려되는 부분이라서 말씀드립니다.)
: :
: : 그럼 즐거운 하루 되십시요. ^^;
: :
: :
: : 인디 님이 쓰신 글 :
: : : 김태우 님이 쓰신 글 :
: : : : 언제나 친절하게 답변해 주셔서 감사합니다.
: : : : 마지막으로 한가지 더 여쭙겠습니다..
: : : : 타이머나 쓰레드로 할때는 그럼 폼이 죽는 현상을 어떻게 해결 해야되는건가요..?
: : : :
: : :
: : :
: : : 님~ 타이머 쓰레드 쓸 이유가 전혀 없어여~
: : : 화면 업데이트 하는데 먼 타이머랑 쓰레드 까지 쓰나여~ ㅋㅋ
: : :
: : : 스트링그리드 OnDrawCell 이벤트 핸들러 하나면 모든게 다 되여~~
: : : 화면에 보이는 셀들에 대해서만 OnDrawCell이 호출되기때문에~
: : : 이벤트 핸들러에서 해당 셀들만 뿌려주면 되져~
: : :
: : : 타이머~ 쓰레드는 전혀 핀트가 빗나건 얘기에여~ ㅋㅋ
: : :
: : : 님~ 엑셀 테스트파일 아직 안올렸네여~~~
: : :
: : : 그리구여~ 혹시 말로만 초보라고 하구~
: : : 실제로는 프로젝트 하는 분 아닌가여? 시간에 쫓기면서 허겁지겁? ㅋㅋㅋㅋ
: : :
: : : 인디로 웹서버 포스트 날리고~ 엑셀 데이타 다루는건 초보자들이 다루는 내용이 아닌데~ ㅋㅋ

+ -

관련 글 리스트
66341 StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 2075 2012/02/21
66348     Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 델파이수행중 1788 2012/02/21
66346     Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 박우성 1711 2012/02/21
66343     Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1435 2012/02/21
66344         Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1505 2012/02/21
66349             Re:Re:Re: 님~ 테스트에 사용한 엑셀파일 올려보세여 인디 1390 2012/02/21
66347             Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 장성호 2656 2012/02/21
66353                 Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1632 2012/02/21
66358                     Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 장성호 1420 2012/02/21
66361                         Re:Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1557 2012/02/21
66345             Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1291 2012/02/21
66362                 Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1251 2012/02/21
66363                     Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1385 2012/02/22
66369                         Re:Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1200 2012/02/23
66372                             Re: 님~ 아직 파일 안올렸네여~ 인디 1218 2012/02/23
66378                                 Re:Re: 님~ 아직 파일 안올렸네여~ 김태우 1231 2012/02/23
66375                                 Re:Re: 님~ 아직 파일 안올렸네여~ 이길남.HoPe 1228 2012/02/23
66382                                     Re:Re:Re: 님~ 아직 파일 안올렸네여~ 김태우 1299 2012/02/23
66388                                         Re:Re:Re:Re: 님~ 아직 파일 안올렸네여~ 이길남.HoPe 1276 2012/02/24
66407                                             Re:Re:Re:Re:Re: 님~ 아직 파일 안올렸네여~ 김태우 1256 2012/02/25
66370                             Re:Re:Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1836 2012/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.