TObjEditor = class(TCustomControl)
~~~~~~~~~~~~~~~
TCustomControl에서 상속받아서 컨트롤을 하나 만들었습니다.
VCL은 아니구요..
(비지오처럼 화면에 블럭을 그린후 이동하거나 연결하는 프로그램입니다)
우선 DoubledBuffered프로퍼티를 사용해봤었는데..
깜박임은 없는데 이상하게 넘 느리네요..
그리는것 자체는 별루 안느린거 같은데...
프로그램 클라이언트 영역으로 탐색기나 다른 프로그램을 이동시키면 버벅~ 거립니다.
화면 refresh하는 중에 버벅거리는거 같은데...
그래서 이중버퍼를 직접 구현해 봤는데..속도는 빠른거 같은데
화면이 깜빡거리네요.. (제대로 구현한거 맞는지..^^)
Paint이벤트에 아래와 같이 코딩했습니다...
문제가 뭘가요? ^^.ㅠㅠ
-------------------------------------
또.. 맨밑에 보면 또다른 비트맵을 사용해서 구현해 봤는데도.. 마찬가지로
화면이 껌뻑거리네요..
procedure TObjEditor.Paint();
var i:integer;
client:TRect;
p:TPoint;
MemBit : HBITMAP;
MemDc,_hdc : HDC;
hOldBmp : HBITMAP;
br, oldBr: HBRUSH;
begin
_hdc := GetDC(self.Handle);
MemBit := CreateCompatibleBitmap(_hdc, 1024, 768);
MemDC := CreateCompatibleDC(_hdc);
hOldBmp := SelectObject(MemDC, MemBit);
oldBr := SelectObject(MemDC, br);
FillRect(MemDc, Rect(0,0, 1024, 768), br);
DrawObjects(MemDc);
BitBlt(_hdc, 0,0, 1024, 768, MemDC, 0, 0, SRCCOPY);
SelectObject(MemDc, hOldBmp);
SelectObject(MemDc, oldBr);
DeleteDC(MemDc);
DeleteObject(MemBit);
end;
-----------------------------------------
procedure TObjEditor.Paint();
begin
OffScreen := TBitmap.Create();
OffScreen.Width := 1024;
OffScreen.Height := 768;
DrawObjects(OffScreen.Canvas.Handle);
BitBlt(Canvas.Handle, 0, 0, 1024, 768, OffScreen.Canvas.Handle, 0, 0, SRCCOPY);
FreeAndNil(OffScreen);
end;
내가 잘못한건가.. 델파이의 한계인가....... 더블버퍼링이 전혀 구현이 안되네요...죄길..
VC++로 되돌리기엔 넘 늦었는데.. ㅠㅠ