Q&A

  • 그림을 그려주는데 자꾸 번쩍거려요...
컴포넌트를 하나 만들고 있거든요... 어플리케이션에서 타이머가 1초에 50번 돌면서 컴포넌트의 OnPaint메소드를 호출하죠... OnPaint메소드에서는 직사각형하고 선 같은 걸 5개 정도 그려줘요... 근데 1초에 50번 그걸 그려주려니까 번쩍거리죠... 상당히 보기 싫더라구요...
그런데 Memory Bitmap이란 걸 쓰면 번쩍거리지 않는다고 하더라구요...
그래서 그걸 컴포넌트 안에 집어넣으려구요...
만드는 컴포넌트는 TPaintBox를 상속받았습니다...

어떻게 하면 좋을까요... 이왕이면 코드로 알려주셨으면 감사하겠습니다...
그럼...
1  COMMENTS
  • Profile
    하얀까마귀 2002.06.28 15:19
    안녕하세요 하얀까마귀 입니다.

    WM_Paint 메세지는 기본적으로 클라이언트 영역을 모두 무효화 시켜 버립니다. 음.. 다시그린다구요...

    번쩍거리는건 전체 영역을 다시 그리기 때문입니다.

    1초에 50번을 하시든 500 번을 하시든.. 다시그리는걸 하지 않아야 합니다.

    페인트 메세지는 다시그릴필요가 있을때 윈도우즈가 보내주는겁니다.

    그러니까.. 음.. 현재 창이 다른창에 가렸다가 나타날때라던지..

    최소화 되었다가 나타난다던지.. 화면밖에 있다가 다시 화면안으로 들어온
    다던지.. 영역의 일부라도 그런부분이 있으면 보내주거든요..

    원래는 해당메세지 내에서.. 다시그려줘야할 영역을 구해서. 해야하는데.
    좀 귀찮죠. 그래서 그냥 몽땅 다시그려 버립니다..

    결론적으로 그리는 작업 자체를 WM_Paint 메세지를 발생시켜서 하지 마세요

    그냥 그리시구요.. 그럼 그림은 나타나겠지만.. 다른창에 가렸다가 나타나는경우에.. WM_Paint 메세지가 불리워진 경우에 지워져 버리죠...

    그부분을 프로그래밍 하세요... 해당 메소드 내에서는요...

    간단하게 비트맵을 하나 만드셔서. 거기다가 같은 그림을 그려도 되구요.

    WM_Paint 에서는 전체영역을 다시 그려버리는 거죠. Bitblt로 저장한
    비트맵을 페인트박스에 복사하는식으로 하시면..됩니다.

    그럼.. 설명이 되었나 모르겠네요..

    즐거운시간 되세요.

    - 하얀까마귀 -

    • 김영철
    • 2002.06.28 07:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      2002.06.28 20:31
      ErrorCode가 10053 인 경우가 바로 클라이언트가 비정상 종료가 발생되어서 생기는 에러코드 입니다. 왜 ...
    • 김영철
      2002.06.28 23:09
      먼저 답변감사드립니다 (__) 올려주신 예제대로는 아니지만 에러가 발생하면 ServerSocket1.sockett....
    • 이현철
      2002.06.29 02:17
      Do it!   [  Socket.close  ]
    • 서종환
    • 2002.06.28 06:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2002.06.28 15:19
      안녕하세요 하얀까마귀 입니다. WM_Paint 메세지는 기본적으로 클라이언트 영역을 모두 무효화 시켜 버...
    • 최용일
      2002.06.28 07:54
      안녕하세요. 최용일입니다. 그냥 간단히 마우스로 선택해서 복사해가지고 붙이시면 됩니다.  ...
    • 델파이사랑
      2002.06.28 18:14
      감사합니다..정말 그러네여....~~
    • 오현주
    • 2002.06.28 05:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2002.06.28 22:05
      프라이머리 키를 신경 안쓰셔두 된다면 insert into () select 문을 이용해 보세요 ()안에 오는 필드갯수...
    • 박준열
      2002.06.28 09:40
      TQuery Comp의 Afterscroll Event를 이용하여 처리하면 가장 좋을듯한데, Insert Into를 사용하지 않고 Ta...
    • 박재현
    • 2002.06.28 04:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 진돌
    • 2002.06.28 04:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.28 07:58
      안녕하세요. 최용일입니다. 델파이에서 자동으로 생성하는 폼은 기본적으로 하나의 인스턴스만 실행됩니...
    • 미러
    • 2002.06.28 03:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 미러
      2002.06.28 21:47
      for I := 0 to Grid.ColCount-1 do for J := 0 to Grid.RowCount-1 do Grid.Cells[I, J] := ''; 이...
    • KDDG_ZZOM
      2002.06.28 03:34
      cells단위로 clear할려면  루프돌려서 해야되는거 아닌가??? 다른방법은 모르겠네요... &n...
    • 이추형
      2002.06.29 21:40
      어디서 부터 말씀을 드려야 할지 감이 않오네요. 몇년전까지만 해도 출퇴근 체크기가 오라클등등의 DB에 ...
    • 허지영
      2002.06.28 03:25
      Local 입력용인지.. 아니면 출근카드 사용하는건지 확실히 말씀해 주세여 ^^ *
    • 소니기빵
      2002.06.28 01:50
      안녕하세요. 이벤트에 보시면 exit 이벤트가 있어요. 거기서 코딩하시면..^^ 그럼..이만.
    • 송강식
      2002.06.28 02:54
      단순히 tcp/ip만을 이용해서 오라클에 접속하는 컴포넌트가 있습니다. 그럴 쓴다면 일은 훨씬 쉽지요.. 오...
    • 머슴
      2002.06.28 02:25
      클라이언트를 전부 깔필요는 없구요.. Sql*net만 설치하시면 됩니다...
    • KDDG_ZZOM
      2002.06.28 02:21
      잘은 모르지만... 클라이언트깔아야 편할것 같기도 하고요... sql net이 다른거 보다 빠르다는걸로 알고 ...
    • 이현철
      2002.06.28 02:19
      우선 client pc 에슨 oracle 드라이버가 없기 때문에 oracle client 를 먼저 설치하셔야 할겁니다...
    • jslove
    • 2002.06.28 01:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.28 01:35
      안녕하세요. 최용일입니다. 자료실에서 검색해보세요. 10여개 정도 있을겁니다. Torry나 DSP같은 사...
    • 최용일
      2002.06.28 01:05
      안녕하세요. 최용일입니다. RX라이브러리에 있는 패키지중 몇몇개는 런타임전용 패키지입니다. 설명서에...
    • 최수림
      2002.06.28 02:04
      감사합니다..!! 저의 불찰이었군요..^^
    • 백지연
    • 2002.06.28 00:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강동순
      2002.06.28 01:53
      글세요 원하는 답이 델넌지 모르겠네요 그런데 저희회사 Print (크리스탈 레포트로 만듬)아주 잘됨 ...
    • 백지연
      2002.06.28 03:34
      답변 고맙습니다. 예제로 주신거는 쿼리 결과를 임시 테이블에 저장해서 사용하신것 같네요.. 그러면 ...
    • 정태현
      2002.06.28 00:21
      Subject      ADO를 이용하여 동적으로 odbc의 알리아스를 생성하는 방법 ...
    • (_^^)~U
    • 2002.06.27 23:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최장원
      2002.06.27 23:38
        ComboBox1.SetFocus;   ComboBox1.DroppedDown := TRUE; 일케 해보세염..그럼 ...
    • 하기
      2002.06.27 22:20
      한가지 방법이 있느데 참고하세요... 앞의 코드로만 Combobox를 찾아가는 방법은 Function으로 작업 하시...
    • 세미콜론
      2002.06.27 22:38
      감사합니다. 좋은 방법이네요... 좀 더 쉬운 방법을 찾고싶었는데.. 이런 방법도 있었네요... 감사드리...
    • 최장원
      2002.06.28 00:46
      콤보박스 첸인쥐 이벤트에 ComboBox1.ItemIndex := ComboBox1.Items.IndexOf (ComboBox1.Text); 넣...
    • 한재령
    • 2002.06.27 21:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      2002.06.28 02:16
      ado 쓰지 마시고, mysql 전용 접속 dll 을 스세요 저두 그거 쓰는데, 빠르고 간편하고 속도도 빠르고 좋아...
    • 델초보
    • 2002.06.27 20:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.06.27 21:18
        if tvEventList.Items.Count > 0 Then     label1.Caption:= inttost...