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
[9808] Re:Re:Re:Re: 제일먼저 해본방법이 그거거든요...
류종택 [ryujt] 1791 읽음    2004-08-15 23:00
답변은 아니고 비슷한 경험을 했던 기억이 나는 듯해서요.
동일한 소스였는데도, 델파이 7하고 델파이 6하고 차이가 있었던 것으로 기억합니다.

지금 사용하시는 델파이 버전이 어떻게 되시는 지요?

만약 델파이 7이 아니시면 업그레이드를
그리고 델파이 7인데도 똑같은 일이 발생하면,
델마당 자료실인가에 Fast Bitmap이라는 콤포넌트(?)를 찾아보세요.

참고로 저도 예전에 강좌 프로그램 작성하면서
Image 콤포넌트 위에 선 및 각종 그래픽 작업을 했었는데,
델파이 7 이하 버전에서 깜박임이 심한 증상이 있었습니다.

아마도 위에 답변을 미리 달아드린 분의 말씀처럼 리페인트 문제이겠지요 ^^;

Milky Way 님이 쓰신 글 :
: 답변에 감사드립니다.
: 그런데
: 말씀하신 대로 했는데도 여전히 깜빡이는데요...
:
: 제가 머 혹시 잘못 코딩한 게 있는지 모르니까,
: 소스파일을 첨부합니다.
:
:
:
:
: 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 974 2004/08/10
9800     Re:[질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 유영인 Cuperido 1212 2004/08/13
9801         Re:Re:[질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 Milky Way 1233 2004/08/13
9802             Re:Re:Re:[질문] TImage 에 그림을 그리는데 화면이 너무 떨려요 civilian 2517 2004/08/13
9804                 Re: 제일먼저 해본방법이 그거거든요... Milky Way 1110 2004/08/13
9805                     Re:Re: 제일먼저 해본방법이 그거거든요... civilian 1121 2004/08/13
9807                         Re:Re:Re: 제일먼저 해본방법이 그거거든요... Milky Way 1149 2004/08/14
9808                             Re:Re:Re:Re: 제일먼저 해본방법이 그거거든요... 류종택 1791 2004/08/15
9811                                 [답변] 드디어 해결됬습니다. 감사드립니다. ^^ Milky Way 1315 2004/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.