자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi StringGrid 의 이미지 넣은 후 해제 하는 질문 입니다.
2019.09.30 11:31
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
스티링 그리드에 이미지를 넣고,
StrGrid.Objects[0, 1] := Bitmap;
넣고 OnDrawCell 이벤트에서
StrGrid.Canvas.Draw(Rect.Left, Rect.Top, TBitmap(StrGrid.Objects[ACol, ARow]));
그렸습니다.
Clear 하는 함수 하나 만들어
TBitmap(StrGrid.Objects[0, 1]).Free;
이렇게 하고 나서
Cellclic 이벤트에서
if Assigned(TBitmap(StrGrid.Objects[ACol, ARow])) then
showmessage('fail');
해보면 메시지 창이 나옵니다...해제가 안되어서 그런건지...
다른 해제 방법이 있는 것인지 궁금 합니다.
댓글 4
-
험프리
2019.10.02 11:11
-
초보델팡이
2019.10.02 17:42
답변 감사합니다
일단 Bitmap 은 지역변수이고
그리드에 이미지가 보여지고 있는 상태이고
클릭시 다른 이미지가 들어고가는 상황입니다.
그래서 클릭시 Clear 하게 끔 만들려고 합니다.
Clear함수에서 접근 할 수 있는게
TBitmap(StrGrid.Objects[0, 1]).Free;
요거 같은데....
TBitmap(StrGrid.Objects[0, 1]) := nil;
FreeAndNil(TBitmap(StrGrid.Objects[0, 1]));
요건 둘다 에러 나네용...
-
험프리
2019.10.04 09:55
TBitmap(StrGrid.Objects[0, 1]).Free; // 이렇게 하면 StrGrid.Objects[0,1]에 있는 객체가 해제됩니다.
TBitmap(StrGrid.Objects[0, 1]) := nil; // 해제된 객체를 TBimtap으로 치환하면 오류가 발생할 것입니다.
StrGrid.Objects[0, 1] := nil; // 요렇게 바꿔보는게 어떨까요?
제가 코드를 정확히 집어드릴 수는 없습니다. 메모리 생성과 해제 확인 매커니즘을 잘 이해하시고, 적절하게 구현해보시기 바랍니다.
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-
초보델팡이
2019.10.04 14:53
감사합니다!
공부좀 열심히 더 해야 할 것 같네요..ㅎ
Delphi StringGrid 의 이미지 넣은 후 해제 하는 질문 입니다.
2019.09.30 11:31
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
스티링 그리드에 이미지를 넣고,
StrGrid.Objects[0, 1] := Bitmap;
넣고 OnDrawCell 이벤트에서
StrGrid.Canvas.Draw(Rect.Left, Rect.Top, TBitmap(StrGrid.Objects[ACol, ARow]));
그렸습니다.
Clear 하는 함수 하나 만들어
TBitmap(StrGrid.Objects[0, 1]).Free;
이렇게 하고 나서
Cellclic 이벤트에서
if Assigned(TBitmap(StrGrid.Objects[ACol, ARow])) then
showmessage('fail');
해보면 메시지 창이 나옵니다...해제가 안되어서 그런건지...
다른 해제 방법이 있는 것인지 궁금 합니다.
댓글 4
-
험프리
2019.10.02 11:11
-
초보델팡이
2019.10.02 17:42
답변 감사합니다
일단 Bitmap 은 지역변수이고
그리드에 이미지가 보여지고 있는 상태이고
클릭시 다른 이미지가 들어고가는 상황입니다.
그래서 클릭시 Clear 하게 끔 만들려고 합니다.
Clear함수에서 접근 할 수 있는게
TBitmap(StrGrid.Objects[0, 1]).Free;
요거 같은데....
TBitmap(StrGrid.Objects[0, 1]) := nil;
FreeAndNil(TBitmap(StrGrid.Objects[0, 1]));
요건 둘다 에러 나네용...
-
험프리
2019.10.04 09:55
TBitmap(StrGrid.Objects[0, 1]).Free; // 이렇게 하면 StrGrid.Objects[0,1]에 있는 객체가 해제됩니다.
TBitmap(StrGrid.Objects[0, 1]) := nil; // 해제된 객체를 TBimtap으로 치환하면 오류가 발생할 것입니다.
StrGrid.Objects[0, 1] := nil; // 요렇게 바꿔보는게 어떨까요?
제가 코드를 정확히 집어드릴 수는 없습니다. 메모리 생성과 해제 확인 매커니즘을 잘 이해하시고, 적절하게 구현해보시기 바랍니다.
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-
초보델팡이
2019.10.04 14:53
감사합니다!
공부좀 열심히 더 해야 할 것 같네요..ㅎ
정확한 테스트는 못했지만 눈에 띄는 부분이 있어 간단히 댓글 남깁니다.
메모리 생성, 해제, 확인이 필요하네요. 다음과 같은 코드가 있다고 가정합니다.
// 생성
Bitmap := TBitmap.Create(nil);
// 해제
Bitmap.Free
// 확인
Assigned(Bitmap)
우선 생성 > 해제 > 확인 진행하면, Bitmap이 있다고 판단할겁니다.
왜냐하면 Bitmap에 어떤것을 담고(Create) 그것을 없애도(Free) 그곳에 담았다(Assigned)는 사실은 바뀌지 않습니다.
담았던 곳을 업애주는 Bitmap := nil; 코드를 추가하시기 바랍니다.
해제하는 부분을 다음과 같이 변경해보세요.
// 해제
Bitmap.Free
Bitmap := nil;
또는
FreeAndNil(Bitmap);
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)