Q&A

  • [질문] 한번더 여쭤보려고 합니다.
다시한번 도움을 받았으면 해서 글올립니다.
copyrect를 사용해보았는데, 객체위에 다른화면이 있으면 그 다른화면이 복사되더군요.

image1.Canvas.CopyRect(image1.clientrect,advstringgrid1.Canvas,advstringgrid1.clientrect);
- 이 image1을 advstringgrid2의 drawcell 이벤트 프로시저에 넣어주려는데, 이 이벤트프로시저에서 rect라는 파라미터가 있어서 rect() 함수를 사용하지 못했습니다.  게다가 화면위에 다른 어플이나 form2등이 위치하면 그 가장위의 보이는 화면만 복사되더군요.  그럼 안되는데 말입니다.

tms의 advstringgrid.canvas를 bitmap으로 추출하기만 하면 되는데, 뭐이리 복잡한지 모르겠습니다.

정 안되면 canvas의 pixel의 rgb를 대상canvas의 pixel의 rgb로 모든 좌표를 뒤지며 대입하는 방법도 있지만,
    image1.width:=advstringgrid1.width;
    image1.height:=advstringgrid1.height;
    if (image1.Width>=1) and (image1.Height>=1) then
       begin
          for n1 := 0 to image1.height-1 do
          begin
            for n2 := 0 to image1.Width-1 do
            begin
              image1.Canvas.Pixels[n2,n1]:=rgb(getrvalue(advstringgrid1.Canvas.Pixels[n2,n1]),getgvalue(advstringgrid1.Canvas.Pixels[n2,n1]),getbvalue(advstringgrid1.Canvas.Pixels[n2,n1]));
            end;
         end;
       end;
-원본canvas가 가려져있든 invisible 되있든 canvas를 copy할수는 있지만, 속도가 너무 느립니다.

그래서 copyrect로 가려져있는화면을 입력한다던지(rect함수는 drawcell에서 못씁니다), sendmessage로 정확하게 어떻게 하는건지, 아니면 다른방법으로 아시는분 계시면 다시한번 부탁드립니다.
2  COMMENTS
  • Profile
    소울해커 2009.03.27 00:39
    Image1.Picture.Bitmap.FreeImage;
    Image1.Picture.Bitmap.Width := AdvStringGrid1.Width;
    Image1.Picture.Bitmap.Height := AdvStringGrid1.Height;
    AdvStringGrid1.PaintTo(Image1.Picture.Bitmap.Canvas.Handle, 0, 0);
    Image1.Repaint;

    이런건 어떠실런지요?
  • Profile
    suffering tears 2009.03.27 01:47
    소울해커님 감사합니다.
    하지만, 정상적으로는 복사되지 않더군요.
    그래서 다른방법으로 해결했습니다.
    도움주신분들 정말 감사합니다.