Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[9807] Re:Re:Re: 제일먼저 해본방법이 그거거든요...
Milky Way [kdman21] 1148 읽음    2004-08-14 08:26
답변에 감사드립니다.
그런데
말씀하신 대로 했는데도 여전히 깜빡이는데요...

제가 머 혹시 잘못 코딩한 게 있는지 모르니까,
소스파일을 첨부합니다.




civilian 님이 쓰신 글 :
: 아래 코드처럼 다시 해보세요. 깜빡임 없이 잘 됩니다.
: =====================================================================================
:
: unit Unit1;
:
: interface
:
: uses
:   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
:   Dialogs, ExtCtrls;
:
: type
:   TForm1 = class(TForm)
:     Image1: TImage;
:     procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
:     procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
:     procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
:       Shift: TShiftState; X, Y: Integer);
:   private
:     { Private declarations }
:     X1: Integer;
:     Y1: Integer;
:     Drawing: Boolean;
:   public
:     { Public declarations }
:   end;
:
: var
:   Form1: TForm1;
:
: implementation
:
: {$R *.dfm}
:
: procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,
: Y: Integer);
: begin
:   //
:   // 이미지에서 마우스 버튼이 눌리면, 눌린 좌표를 보관해두고 "그리기" 상태임을 설정한다.
:   //
:   Drawing := True;
:   X1 := X;
:   Y1 := Y;
: end;
:
: procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
: begin
:   //
:   // 이미지 위에서 마우스가 움직이는데, 그리기 상태이면 마우스의 움직임에 따라 선을 그린다
:   //
:   if Drawing then
:   begin
:     //
:     // 이전 좌표로 옮긴, 현재 마우스 좌표로  검은 색으로 선을 그린다.
:     //
:     Image1.Canvas.MoveTo(X1, Y1);
:     Image1.Canvas.Pen.Color := clBlack;
:     Image1.Canvas.LineTo(X, Y);
:     //
:     // 좌표를 바꾸어주자
:     //
:     X1 := X;
:     Y1 := Y;;
:   end;
: end;
:
: procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
:   Shift: TShiftState; X, Y: Integer);
: begin
:   //
:   // 마우스 버튼이 떨어졌다. 이젠 안그리는 상태로 설정
:   //
:   Drawing := False;
: end;
:
: end.
:
:
:
:
: Milky Way 님이 쓰신 글 :
: : 우선 civilian 님 답변에 감사드립니다.
: :
: : 그런데 말이죠..
: : 제가 제가 먼저 해본 방법이 image.canvas에 직접 그리는 거였습니다.
: : 그런데 마우스가 움직일때마다 전체 Image가 춤을 추듯 깜빡임니다. 거의 환상적이죠.
: :
: : 그래서 Bmp에 그리고 이 bmp를 Image에 할당하였죠.
: : 깜빡임은 약간 들해진 것 같지만 역시 마찬가지로 쓰기 힘들 정도죠.
: :
: : 그래서 여기 고수님들은 어떻게 처리하셨는지 질문드리는 겁니다.
: : 어쩌면 엄청 간단해 보이는 건데, 이게 이렇게 어려울 줄은 생각도 못했네요...
: :
: : 아시는 분 없을까요?...ㅠ.ㅠ
: :
: : civilian 님이 쓰신 글 :
: : : 비트맵에 그린다음 Image에 할당하는 대신 Image.Canvas 에 직접 그리면 됩니다.
: : :
: : : Milky Way 님이 쓰신 글 :
: : : : 우선 답변에 감사드립니다.
: : : :
: : : : 제가 할려는 것은 이미지를 불러와서, 그 위에 선그리기나 글씨쓰기 등 각종 작업을 한 후
: : : : 이를 다시 저장하려고 합니다.
: : : :
: : : : 그런데, 페인트 박스는 그림을 그리고 나서, 다른화면에 가려지게 되면, 가려졌던 부분이 자동으로 복구되지가 않는데,
: : : : 어떻게 해야 되죠?
: : : : 그리고 저장은 어떻게 하는거죠?
: : : :
: : : : 방법을 알려주시면 감사하겠습니다.
: : : : 책은 아무리 봐도 그런 내용이 없네요...ㅠ.ㅠ
: : : :
: : : :
: : : :
: : : : 유영인  Cuperido 님이 쓰신 글 :
: : : : : 델파이 4버젼 이상에선가부터 TImage 컴포넌트가 자동으로 Refresh가 되게 되었습니다.
: : : : : 그래서, OnPaint 메시지를 따로 처리를 안해줘도 되는데 반해, 계속 다시 그리기 때문에
: : : : : 깜빡 거림 현상이 나타납니다.
: : : : :
: : : : : 가장 쉬운 방법은 TPaintBox를 사용하는 것입니다. :)
: : : : :
: : : : :
: : : : : cuperido
: : : : :
: : : : : Milky Way 님이 쓰신 글 :
: : : : : : 안녕하세요?
: : : : : : 델파이 초보입니다.
: : : : : :
: : : : : : 이미지의 팔레트에 Mousemove 이벤트시 lineto 메소드로 그림을 그리도록
: : : : : : 프로그래밍 했는데요, 화면떨림 현상이 너무 심해서 쓸 수 없을 정도입니다.
: : : : : :
: : : : : : 게시판에 다른분들이 쓰신 글을 보니
: : : : : : 아래와 같이 하라고 되어 있더군요.
: : : : : :
: : : : : : DoubleBuffered := True;
: : : : : :
: : : : : : 그런데 이걸 추가해도 마찬가지 입니다.
: : : : : :
: : : : : : 어떻게 해야 이미지 깜빡임없이 선을 그릴 수 있을까요?
: : : : : : 고수님들의 답변 기다리겠습니다.
: : : : : :
: : : : : : ------------------------------------------------------------------
: : : : : : procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
: : : : : :   Y: Integer);
: : : : : : begin
: : : : : :   DoubleBuffered := True;
: : : : : :   if Drawing = True then
: : : : : :   begin
: : : : : :       Bmp.Canvas.Pen.Width := StrtoInt(TxtLineWidth.Text);
: : : : : :       with Bmp.Canvas do
: : : : : :       begin
: : : : : :         MoveTo(MovePt.X,MovePt.Y);
: : : : : :         LineTo(X,Y);
: : : : : :       end;
: : : : : :       Image1.Picture.Assign(bmp);
: : : : : :   end;
: : : : : :   MovePt := Point(x,y);
: : : : : :
: : : : : : end;

+ -

관련 글 리스트
9795 [질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 Milky Way 973 2004/08/10
9800     Re:[질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 유영인 Cuperido 1212 2004/08/13
9801         Re:Re:[질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 Milky Way 1232 2004/08/13
9802             Re:Re:Re:[질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 civilian 2516 2004/08/13
9804                 Re: 제일먼저 해본방법이 그거거든요... Milky Way 1109 2004/08/13
9805                     Re:Re: 제일먼저 해본방법이 그거거든요... civilian 1121 2004/08/13
9807                         Re:Re:Re: 제일먼저 해본방법이 그거거든요... Milky Way 1148 2004/08/14
9808                             Re:Re:Re:Re: 제일먼저 해본방법이 그거거든요... 류종택 1791 2004/08/15
9811                                 [답변] 드디어 해결됬습니다. 감사드립니다. ^^ Milky Way 1314 2004/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.