본문 바로가기

프로그래밍/Delphi

[Delphi]TPrinter.BeginDoc에서 무한루프 도는 문제 분석

TListView 또는 TFlyTeeView를 사용한 창에서 해당 트리 노드에 넣었던 객체를 이용하여
TPrinter를 이용하여 인쇄 하고자 하는 경우에 특정한 경우 Priner.BeginDoc에서 무한루프가 걸리는 현상을 분석 한 결과
BeginDoc내에서 Application.ProcessMessages를 호출 하는데 
ftvSearchResult.OnGetNodeAttributes에 걸린 데이터 취하는 부분의 이벤트가 계속 호출되어 무한루프에 빠지는 경우가 발생됨
이로 미루어 봤을때 BeginDoc 처리할 경우에 내부 화면 리프레시 이벤트에 의해서 무한루프가 도는 경우가 발생할 수 있으니 동일한 증상시 화면 처리 이벤트를 체크해 봐야 할 것임


해결을 위한 처리 예)
임시로 이벤트 동작 중지 처리


  ftvSearchResult.OnGetNodeAttributes := nil;
  AArticleViewerForm.ShowModal;
  ftvSearchResult.OnGetNodeAttributes := ftvSearchResultGetNodeAttributes;