Q&A

  • 화면깜박임처리가 안돼는데요!!!
소스를 올립니다.

일단이미지를 불러와서 화면에 글씨를 뿌린다음 ...

마우스 MOVE 이벤트로 드래그합니다.

이때 화면이 깜박거려서 신경이 쓰입니다. 이깜박거림을 해제

시킬려고 WMEraseBkgnd를 처음 써보는데 잘안돼서 올립니다

소스를 올리니 여러고수님들의 지도부탁드립니다.



-소스-



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

DXSprite, DXInput, DIB, DXDraws, Menus, ExtDlgs, ExtCtrls, ImgList;



type

MapSize = record

A : longint;

end;



TMyComponent = class(Timage) //깜박임처리를 위하여 ....

protected

procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;

end;



TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

ImageList1: TImageList;

Image1: TImage;

Image2: TImage;

Image3: TImage;

OpenPictureDialog1: TOpenPictureDialog;



procedure N3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);



private

{ Private declarations }

Map : array[0..199,0..14] of Mapsize; public

{ Public declarations }

end;





var

msX,msY : integer;



Form1: TForm1;



implementation



{$R *.DFM}



{===============================================================================}

procedure TForm1.N3Click(Sender: TObject);

{-------------------------------------------------------------------------------}

var

PathName :string;

FileName :string;

bmp : TBitmap;

i,j :integer;



begin

if OpenPictureDialog1.execute then

begin

Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

end;

Image1.Canvas.Font.Color :=clwhite;

Image1.Canvas.Font.Size := 15;

Image1.Canvas.Brush.Style :=bsClear;



for i:= 0 to 199 do

begin

for j:= 0 to 14 do

begin

Image1.Canvas.TextOut(i*32,j*32,InttoStr(map[i,j].A));

end;

end;



end;

{===============================================================================}

procedure TForm1.FormCreate(Sender: TObject);

{-------------------------------------------------------------------------------}

var

i,j,k : integer;

begin



for i:= 0 to 199 do

begin

for j:= 0 to 14 do

begin

Map[i,j].A :=0;

end;

end;



end;

{===============================================================================}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

{-------------------------------------------------------------------------------}

begin

MsX := X;

msY := Y;

end;

{===============================================================================}

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

{-------------------------------------------------------------------------------}

var

R :Trect;

begin

r.Left := msx;

r.Top := msY;

r.Bottom := Y;

r.Right := X;

Canvas.Brush.Style :=bsClear;

Canvas.Rectangle(msX,msY,X,Y);

end;



{===============================================================================}

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

{-------------------------------------------------------------------------------}

var

r : TRect;



begin



if shift = [ssLeft] then //Mouse left button

begin

r.Left := msx;

r.Top := msY;

r.Bottom := Y;

r.Right := X;

Canvas.Brush.Style :=bsClear;

Refresh;

Canvas.Rectangle(msX,msY,X,Y);

end;

end;

{==============================================================================}

procedure TMyComponent.WMEraseBkgnd(var Message: TWMEraseBkgnd);

{------------------------------------------------------------------------------}

begin

Message.Result := 1; //이부분에서 깜빡거림이 없어져야 하는디....

end;





end.







1  COMMENTS
  • Profile
    토맛토 2001.06.15 10:02
    그림위에 마우스로 사각형의 도형을 드래그 하고자 하시는 것인가요?

    이때 그림이 무지하게 깜박거린다는 말씀이것 같은데요

    깜박임을 방지하기 위해 델파이의 폼에는 매우 기특한 옵션이 있답니다.



    TWinControl에서 상속받은 DoubleBuffered 라는 부울리언 속성인데요 이것을 true로 하면 깜박임이 없어집니다.



    폼위에 그려지는 내용을 더블버퍼링하는 것이지요 스프라이트 에니메이션에서 사용하는 그 더블버퍼말이지요



    FormCreate 이벤트에



    DoubleBuffered := true;

    이렇게 넣어 보시죠









    델초보 wrote:

    > 소스를 올립니다.

    > 일단이미지를 불러와서 화면에 글씨를 뿌린다음 ...

    > 마우스 MOVE 이벤트로 드래그합니다.

    > 이때 화면이 깜박거려서 신경이 쓰입니다. 이깜박거림을 해제

    > 시킬려고 WMEraseBkgnd를 처음 써보는데 잘안돼서 올립니다

    > 소스를 올리니 여러고수님들의 지도부탁드립니다.

    >

    > -소스-

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > DXSprite, DXInput, DIB, DXDraws, Menus, ExtDlgs, ExtCtrls, ImgList;

    >

    > type

    > MapSize = record

    > A : longint;

    > end;

    >

    > TMyComponent = class(Timage) //깜박임처리를 위하여 ....

    > protected

    > procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;

    > end;

    >

    > TForm1 = class(TForm)

    > MainMenu1: TMainMenu;

    > N1: TMenuItem;

    > N2: TMenuItem;

    > N3: TMenuItem;

    > N4: TMenuItem;

    > N5: TMenuItem;

    > N6: TMenuItem;

    > N7: TMenuItem;

    > N8: TMenuItem;

    > N9: TMenuItem;

    > N10: TMenuItem;

    > N11: TMenuItem;

    > N12: TMenuItem;

    > N13: TMenuItem;

    > N14: TMenuItem;

    > ImageList1: TImageList;

    > Image1: TImage;

    > Image2: TImage;

    > Image3: TImage;

    > OpenPictureDialog1: TOpenPictureDialog;

    >

    > procedure N3Click(Sender: TObject);

    > procedure FormCreate(Sender: TObject);

    > procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

    > Y: Integer);

    >

    > private

    > { Private declarations }

    > Map : array[0..199,0..14] of Mapsize; public

    > { Public declarations }

    > end;

    >

    >

    > var

    > msX,msY : integer;

    >

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > {===============================================================================}

    > procedure TForm1.N3Click(Sender: TObject);

    > {-------------------------------------------------------------------------------}

    > var

    > PathName :string;

    > FileName :string;

    > bmp : TBitmap;

    > i,j :integer;

    >

    > begin

    > if OpenPictureDialog1.execute then

    > begin

    > Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

    > end;

    > Image1.Canvas.Font.Color :=clwhite;

    > Image1.Canvas.Font.Size := 15;

    > Image1.Canvas.Brush.Style :=bsClear;

    >

    > for i:= 0 to 199 do

    > begin

    > for j:= 0 to 14 do

    > begin

    > Image1.Canvas.TextOut(i*32,j*32,InttoStr(map[i,j].A));

    > end;

    > end;

    >

    > end;

    > {===============================================================================}

    > procedure TForm1.FormCreate(Sender: TObject);

    > {-------------------------------------------------------------------------------}

    > var

    > i,j,k : integer;

    > begin

    >

    > for i:= 0 to 199 do

    > begin

    > for j:= 0 to 14 do

    > begin

    > Map[i,j].A :=0;

    > end;

    > end;

    >

    > end;

    > {===============================================================================}

    > procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > {-------------------------------------------------------------------------------}

    > begin

    > MsX := X;

    > msY := Y;

    > end;

    > {===============================================================================}

    > procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > {-------------------------------------------------------------------------------}

    > var

    > R :Trect;

    > begin

    > r.Left := msx;

    > r.Top := msY;

    > r.Bottom := Y;

    > r.Right := X;

    > Canvas.Brush.Style :=bsClear;

    > Canvas.Rectangle(msX,msY,X,Y);

    > end;

    >

    > {===============================================================================}

    > procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

    > Y: Integer);

    > {-------------------------------------------------------------------------------}

    > var

    > r : TRect;

    >

    > begin

    >

    > if shift = [ssLeft] then //Mouse left button

    > begin

    > r.Left := msx;

    > r.Top := msY;

    > r.Bottom := Y;

    > r.Right := X;

    > Canvas.Brush.Style :=bsClear;

    > Refresh;

    > Canvas.Rectangle(msX,msY,X,Y);

    > end;

    > end;

    > {==============================================================================}

    > procedure TMyComponent.WMEraseBkgnd(var Message: TWMEraseBkgnd);

    > {------------------------------------------------------------------------------}

    > begin

    > Message.Result := 1; //이부분에서 깜빡거림이 없어져야 하는디....

    > end;

    >

    >

    > end.

    >

    >

    >

    • info
    • 2001.06.15 03:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조복기
      2001.06.15 09:50
      테이블명이 한글로 되어있어서 소스를 보기 무척 난해하네요^^ 전 필드명인줄 알았거든여.. insert sel...
    • 권순택
    • 2001.06.15 03:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2001.06.15 03:42
      라이브러리(DLL)로 만드셔서 Dll을 호출하면 되겠죠... 권순택 wrote: > 안녕하세요 > > 아시는 ...
    • 써니
    • 2001.06.15 03:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 쿠쿠리
    • 2001.06.15 02:01
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Ziker
      2001.06.21 01:05
      안녕하세요 Ziker 입니다. 아래 이경문님께서도 글 올려 주셨듯이, 델파이에서 사이즈를 기대 하기란 힘...
    • 이경문
      2001.06.17 09:40
      가슴아픈 얘기지만 Borland계열이 제품으로는 200k도 작은 용량입니다. 흑흑흑... 방법에 대해 많이 고민...
    • 쿠쿠리
      2001.06.19 01:14
      그럼 볼랜드 계열이 아닐 경우엔 어떤가요? 뭐 VC++이나 VB나 썼을때는 용량 줄일 방법이 있는지... 급...
    • 이경문
      2001.06.19 01:23
      VB는 잘 모르겠구요(아무래도 VB는 dll없으면 안돌아 가는 놈이라서 예상컨데 델파이 product보다 크기가 ...
    • 아폴론
    • 2001.06.15 01:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정종섭
      2001.06.15 19:28
      아폴론 wrote: > 델가족 여러분중 오라클 고수님들께 질문 합니다. > > 델5와 오라클8i를 이용해 서버...
    • 아폴론
      2001.06.16 03:05
      어떻게 하면 아카이브모드를 노아카이브모드로 바굴수 있나요? > 델파이 에서 외부 명령어를 실행하면...
    • XXX
    • 2001.06.15 01:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Lee
      2001.06.15 01:52
      group by 문장에서는 보통 max라는 함수를 잘 사용하지 않는것 같은데 정확히는 모르겠구요 제가 일때...
    • 초보2
    • 2001.06.15 01:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • SHANS
      2001.06.19 18:21
      그 에러는 타프로세스의 영역을 침범했을 경우등에 나타나는 에러로서 치명적인 에러입니다. 즉, 이 에러...
    • 이재식
      2001.06.15 02:24
      이렇게 ..... unprepare를 빼버리세요. 그리고, prepare앞에 이렇게 해보세요 if Prepared then ...
    • 델초보
    • 2001.06.15 01:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 토맛토
      2001.06.15 10:02
      그림위에 마우스로 사각형의 도형을 드래그 하고자 하시는 것인가요? 이때 그림이 무지하게 깜박거린다는 ...
    • 델맹맹
    • 2001.06.15 00:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.06.15 00:31
      안녕하세요. 최용일입니다. 굉장히 많이 나오는 질문이네요... 빠른 답변을 바란다면 항상 먼저 검색해...
    • 델맹맹
      2001.06.15 00:34
      최용일 wrote: > 안녕하세요. 최용일입니다. > > 굉장히 많이 나오는 질문이네요... 빠른 답변을 바란...
    • 최용일
      2001.06.15 00:19
      안녕하세요. 최용일입니다. 툴버튼의 Tag속성에 2번째를 표시하는 숫자를 넣어서 Sender파라매터를 이용...
    • Ziker
      2001.06.15 00:22
      최용일 wrote: > 안녕하세요. 최용일입니다. > > 툴버튼의 Tag속성에 2번째를 표시하는 숫자를 넣어서 ...
    • 정세민
    • 2001.06.14 23:29
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 박진훈
      2001.06.15 04:42
      1.멀티플랫폼 지원 여부 델파이는 윈도용이구, 리눅스에서는 비슷한 카일릭스가 있죠, 파워빌더는 윈...
    • 최용일
      2001.06.14 23:47
      안녕하세요. 최용일입니다. 1. 지원 (유닉스플랫폼에는 Kylix를 쓰시면 됩니다) 2. 아주 잘 지원 3. ...
    • 정세민
      2001.06.15 00:41
      빠른 답변 감사드립니다. 다름이 아니라 Kylix에 대한 부분인데요. 이거는 Delphi하구는 다른 Tool로 알...
    • 최용일
      2001.06.15 00:47
      다른 툴이지만 Kylix는 유닉스용 델파이라고 생각하시면 됩니다. 특별히 윈도우플랫폼에만 적용되는 코...
    • 정세민
      2001.06.15 02:41
      ..
    • 정우
    • 2001.06.14 22:44
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Lee
      2001.06.14 23:28
      이 방법은 어떨까요? 한개의 쿼리를 활용하세요. Select 팀.팀명, 사원.사번, 사원....
    • blackjewel
      2001.06.15 01:02
      답변감사해여^^; 그런데 질문이...... Query문 안에 case문이 사용가능한가여? > case whe...
    • Lee
      2001.06.15 01:39
      말씀하신데로 case문입니다. case when 출근부.일자='01' and 출근부.출근확인='o' then 'O' else 'X' e...
    • 최용일
      2001.06.15 00:00
      안녕하세요. 최용일입니다. 스트링그리드에서 쓰는 TInplaceEdit를 제어해서 하는 방법두 있겠구... 생...
    • 초보님
    • 2001.06.14 21:49
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 윤광희
      2001.06.16 22:53
      디플로이 옵션에서 include file version을 체크하시구 디플로이하면 HTML 만들어지죠? 거기에 버전 표시...
    • 나그네
      2001.06.16 04:49
      초보님 wrote: > ACTIVEXFORM으로 만든 프로그램을 을 익스플로우로 잘 나옵니다... > > 근데...갱신은...
    • 최용일
      2001.06.15 00:39
      안녕하세요. 최용일입니다. Web Deployment Options에서 Include file version number 와 Auto incremen...
    • 초보님
      2001.06.15 00:52
      확인했어요........그래도 않되요........ㅜ.ㅜ 최용일 wrote: > 안녕하세요. 최용일입니다. > > We...
    • 최용일
      2001.06.15 01:32
      되는데.... 쩝 Project/Options메뉴의 Version Info탭에서 버전을 크게 올려보세요... 아마두 예전에...
    • 최용일
      2001.06.15 00:07
      안녕하세요. 최용일입니다. 흠~ FindWindow로 다이얼로그 찾아서 다이얼로그의 버튼에 마우스 이벤트를 ...
    • 궁금
    • 2001.06.14 21:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 바람개비
      2001.06.14 23:43
      유닛컴파일후 생기는 파일입니다. 해당 유닛파일(compute.pas)이 존재하지 않거나 선언된 유닛이 없다는 ...
    • 시빌더
    • 2001.06.14 20:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • kuma
      2001.06.15 04:37
      시빌더 wrote: > RxRichEdit 에서 선이나 Box를 그리는 방법아시는분 > 좀 갈쿄주셔요... 간단한 코드...
    • 이성찬
      2001.06.16 20:55
      IndexFieldNames := 'field1;field2';