Q&A

  • [질문]이미지2개를 겹쳐 놓았을때 생기는 에러입니다.
제가 그림파일을 하나 이미지1에 띄워놓고 원본 손상없이
그위에 마우스 클릭시 원하는 위치에 글씨나 표시를 쓰고 또는 지우는 작업을 해야해서
또하나의 이미지2를 동적생성해서 원하는 작업을 했습니다.
그럼데 특정pc 에서 이미지2를 다시 생성했을때 밑그림이 안보입니다.
image2.Transparent := True; 로 했는데도요.
첨부한 샘플프로그램을 문제pc 에서 실행했을 때(일반적으론 잘 됩니다.)
처음엔 밑그림이 보이고 이미지위에 마우스클릭으로 사각형 그리고
지우려고 버튼을 누르고 나면 그다음부터 하얗게 됩니다.
왜 특정컴에서만 그럴까요?  (실행파일 첨부합니다.)

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image2.Free;
  Image2:=TImage.Create(nil);
  Image2.Parent := Panel1;
  Image2.Align := alClient;
  image2.Width := 1280;
  image2.Height := 800;
  image2.Transparent := True;
  image2.OnMouseDown := Image2MouseDown;
end;

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image2.Canvas.Rectangle(x,y,x+10,y+10);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image2.Free;
  Image2:=TImage.Create(nil);
  Image2.Parent := Panel1;
  Image2.Align := alClient;
  image2.Width := 1280;
  image2.Height := 800;
  image2.Transparent := True;
  image2.OnMouseDown := Image2MouseDown;
end;
3  COMMENTS
  • Profile
    홍성락 2008.10.15 00:45
    image Transparent로 검색하시면 투명, 반투명에 대해 많이 나옵니다,
    image에서 Transparent되는 Color는 지정하지 않으면 Canvas.Pixels에서 좌측 맨아래 색을 가져올 겁니다.
    그래서 위 소스에서 간단히 하시려면 미리 색을 그린 빈 박스를 그리는 것이 좋습니다.
    중간중간에 투명색을 바꾸려면 image2.Picture.Bitmap.TransparentColor := clWhite도 있으나
    이경우는 비트맵일 경우입니다 그래서 범용적으로 하려면
    TImage(Sender).Canvas.Pixels[0, TImage(Sender).Height - 1] := clWhite;식으로 잠깐 바꿔 사용도 합니다.

    //생성시

    Image2.Free;
    Image2:=TImage.Create(nil);
    Image2.Parent := Panel1;
    Image2.Align := alClient;
    image2.Width := 1280;
    image2.Height := 800;

    //색지정, 빈박스, 안전하게 투명색 지정(단, 비트맵일 경우만)
    Image2.Canvas.Brush.Color := clWhite;
    Image2.Canvas.Pen.Color := clWhite;
    Image2.Canvas.Rectangle(0, 0, image2.Width, image2.Height);
    //image2.Picture.Bitmap.TransparentColor := clWhite;//비트맵 이외일 경우 제외

    image2.Transparent := True;
    image2.OnMouseDown := Image2MouseDown;




    //그릴때

    //색지정
    Image2.Canvas.Brush.Color := clBlack;
    Image2.Canvas.Pen.Color := clBlack;
    Image2.Canvas.Rectangle(x,y,x+10,y+10);


  • Profile
    석주현 2008.10.15 03:02
    TImage 위에 TPaintBox를 올려 놓으시고 사용하시면 됩니다.
  • Profile
    임정미 2008.10.17 23:43
    Transparent 색을 지정해 줘야하는진 몰랐네요.
    덕분에 잘 해결했습니다.
    감사합니다.^^
    • 구창민
      2008.10.17 22:11
      안녕하세요.. 부인되시는 분이 어떤 실수를 하셨길래..ㅎㅎ:: 우선 부인되시는 분께서 하시는 일의...
    • 최용일
      2008.10.16 06:05
      그냥 간단하게 WM_DEVICECHANGE메세지를 처리하는 메세지핸들러하나 만들어주시면 됩니다. 아래 예제...
    • 하늘사랑
      2008.10.16 08:43
      답변 너무 감사드립니다 ^^ 소스보구 더 연구좀 해봐야겠어요 ^^ 시점도 중요하궁.. 생각할께 많내...
    • 석주현
      2008.10.16 02:44
      정 어려우시다면 네이트온 친구 찾기 해주세요. ^^ superjuhyun 골뱅이 hotmail.com 입니다.
    • phono
      2008.10.16 09:48
      델7용 퀵4 소스가 있어야 해결이 날거 같네요..
    • 박무개
    • 2008.10.16 00:28
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2008.10.16 17:38
      안녕하세요.. 퀀텀 그리드는 잘 모르지만, SelectedRowCount -1 로 for 문을 한번 돌려보세요.. ...
    • 가르쳐주삼
      2008.10.16 19:13
      i = 0으로 하고 SelectedRowCount -1로 해서 for문을 돌아도 오류가 발생합니다.....ㅠ.ㅠ bmtemp에 ...
    • 석주현
      2008.10.15 17:40
      FindFirst, FindNext 를 찾아 보시면 될 것 같네요. 결국 파일 이름과 어트리 뷰트로 확인 합니다. ...
    • 하늘사랑
      2008.10.15 19:12
      친절한 답변 너무 감사드립니다 ^^ 오늘도 즐겁고 행복한하루 보내시구요~ 감시조심하셔용 ^^ 답변...
    • 정경철
    • 2008.10.15 06:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.15 17:19
      다이렉트 쇼 예제를 보시면 믹싱 예제가 있습니다. 예제에 보시면 믹싱과 PIP, Overlay 등 여러가지 ...
    • 구창민
      2008.10.16 17:40
      안녕하세요.. 질문이 너무 두리뭉실(?)한거 같습니다.. 오류가 발생했을때 어떤 오류메시지였으며...
    • 손석수
    • 2008.10.15 01:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.15 02:32
      다른 사람이 만든 소스면 그 사람에게 달라던지 아니면 TEdit를 상속해서 임시로 동작하게 한 후에 다시 ...
    • 손석수
      2008.10.15 13:44
      델파이는 처음 접하는 툴이라 직접 만드는 코딩을 하지 못하구요. 다른 사람이 만들어 놓은 소스를 ...
    • 석주현
      2008.10.15 17:24
      파일 이름에서 보듯이 분명히 TEdit에서 상속 받은 컴포넌트 같습니다. 일단 소스전체를 다른 디렉토...
    • 싸랑
      2008.10.16 19:55
      http://www.delphiforfun.org/Programs/Download/numedit.zip
    • steps
    • 2008.10.15 01:39
    • 5 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.10.15 01:56
      ocx내에서 close나 free를 쓰면 ocx자체는 없어지는데 IE가 이 파일명을 물고 있어서 새로 다운로드된 파...
    • 구창민
      2008.10.15 17:47
      안녕하세요.. 등록하실때 윈도그 명령 regsvr32 로 하지 않으셨나요..? regsvr32 -u 옵션으로 해...
    • steps
      2008.10.16 02:15
      ocx의 등록은 installshield로 배포판을 만들때 자동등록설정을 주어 설치시에 자동으로 됩니다. ocx의 ...
    • 구창민
      2008.10.16 17:49
      코드로 등록및 제거가 필요한 부분인거 같네요.. 아래 코드를 참고하셔서 테스트 해보세요.. 즐거...
    • steps
      2008.10.16 20:27
      구창민님 감사합니다.
    • 김주영
    • 2008.10.15 00:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.15 02:36
      기본 VCL만 사용했다면 아주 소소한 부분에서 프로퍼티 에러 정도 나겠죠. 다른 컴포넌트 같을 걸 사용...
    • 임정미
    • 2008.10.14 23:24
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.10.15 00:45
      image Transparent로 검색하시면 투명, 반투명에 대해 많이 나옵니다, image에서 Transparent되는 Colo...
    • 석주현
      2008.10.15 03:02
      TImage 위에 TPaintBox를 올려 놓으시고 사용하시면 됩니다.
    • 임정미
      2008.10.17 23:43
      Transparent 색을 지정해 줘야하는진 몰랐네요. 덕분에 잘 해결했습니다. 감사합니다.^^
    • 김기범
    • 2008.10.14 21:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.15 02:50
      이동은 시킬수 있습니다. 메모장의 헨들을 가지고 와서 이동은 가능합니다만 회전을 안됩니다. ㅡ_ㅡ;...
    • 김원호
    • 2008.10.14 19:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.15 02:55
      무슨 리포트를 쓰시는지 알려 주셔야 아마도 답변이 나올것 같네요. 그런데 보통 리포트에도 메모와 ...
    • 최용일
      2008.10.14 02:39
      CreateProcess나 ShellExecuteEx등을 이용해서 종료될때까지 대기하시면 됩니다. 아래 팁을 참고하세...
    • 장성호
      2008.10.14 02:58
      프로그램을 실행후에 WaitForSingleObject 로 해당 프로세스가 종료될때 까지 기다리면 됩니다. ...
    • 하늘사랑
      2008.10.14 04:10
      두분 모두 좋은답변 너무너무 감사합니다.. ^^ 두분 덕분에 문제를 해결했습니다 ^^ 감기조심하시공 ...
    • steps
    • 2008.10.13 23:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.10.16 10:15
      ImageEn 이라는 컴포넌트를 확인해 보세요. AniGif를 읽고 쓰는 기능이 있습니다. 리사이징 기능도 있을...
    • steps
      2008.10.17 01:30
      ImageEn에 프레임별 이미지추출, 이미지삽입, 프레임삭제의 기능은 있는데 리사이징은 없군요. 정욱님 ...