다시한번 도움을 받았으면 해서 글올립니다.
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로 정확하게 어떻게 하는건지, 아니면 다른방법으로 아시는분 계시면 다시한번 부탁드립니다.
Image1.Picture.Bitmap.Width := AdvStringGrid1.Width;
Image1.Picture.Bitmap.Height := AdvStringGrid1.Height;
AdvStringGrid1.PaintTo(Image1.Picture.Bitmap.Canvas.Handle, 0, 0);
Image1.Repaint;
이런건 어떠실런지요?