2011-03-08 7 views
1

트레이 풍선 힌트를 통해 다양한 이벤트를 알리는 D2006 앱이 있습니다. 매우 자주, 자주는 아니지만 - 앱의 10 번 중 1 번을 말한다 - 힌트 중 하나는 그것이 계속해서 계속해서 팝업 될 것이라고 결정합니다. 영원히. 앱을 종료하는 것만 큼 멈추는 것입니다.Delphi - 반복적 인 "고스트"트레이 풍선 팝업 소스를 찾는 방법은 무엇입니까?

앱이 다른 풍선 도움말을 발행하는 경우 팬텀 힌트를 대체하지만 새로운 힌트가 시간 초과되면 팬텀 힌트가 반환됩니다. 마찬가지로 팬텀 힌트를 닫으면 즉시 반환됩니다.

힌트를 만드는 코드가 반복적으로 호출되지 않는다는 것을 확인했습니다. 힌트는 어딘가에서 더 깊게 발생합니다.

MainForm.TrayIcon1.BalloonFlags := Flag ; 
    MainForm.TrayIcon1.BalloonTitle := Title ; 
    MainForm.TrayIcon1.BalloonHint := Message ; 
    MainForm.TrayIcon1.BalloonTimeout := Delayms ; 
    MainForm.TrayIcon1.ShowBalloonHint ; 
+0

어떻게 힌트가 튀어 나오고 있습니까? 시간이 초과되면 어떻게 힌트를 숨기고 있습니까? 일부 코드를 보면 오류를 발견하는 데 도움이 될 수 있습니다. 하나도없이, 코드없이, 내가 말할 수있는 것은 "아마 앱에 오류가있을 것"입니다. –

+0

@ Cosmin. 편집을 참조하십시오. 나는 힌트를 명시 적으로 숨기고 있지 않다. 타임 아웃이 끝나고 diposes가 만료 가정합니다. – rossmcm

+0

이것은 도움이되지 않지만 Delphi 2006에서이 문제가 있었으며 방금 포기했습니다. 솔루션을 찾을 수 없었습니다. 나는 그것이 어딘가에있는 버그라고 확신하지만, 분명히 내 코드에는 없었습니다. 나는 그것이 Windows XP에서 문제가 아니었지만 그것은 분명히 Windows 7에 있었다고 생각합니다. – Misha

답변

5

풍선 힌트의 공통 진입 점을 만드십시오. 래퍼 (wrapper) 기능을 제공한다. 표시 할 텍스트와 함께 WhereCalledFrom이라는 다른 문자열 매개 변수를 포함하고이를 사용하여 앱에서 힌트를 호출하는 부분을 식별합니다.
래퍼 내에서 날짜/시간, WhereCalledFrom 및 메시지를 기록하려면 모든 힌트 호출 (.txt 파일, GExperts 디버거, Windows 출력 디버그 문자열, Windows 이벤트 로그 등)을 기록하십시오. 이렇게하면 쉽게 추적 할 수 있습니다.

+0

나는 이미이 환상의 힌트가 나타날 때 루틴이 다시 호출되지 않는다는 것을 확증했다. – rossmcm

0

자동 풍선 열기를 사용하지 않도록 설정하고 응용 프로그램에서 사용하도록 할 수 있습니다. 풍선을 표시 할 때 타이머를 설정하고 타이머가 만료되면 풍선을 닫습니다.

위의 (C#에서 비슷한 문제가 있었는데 IDE보다 Windows가 더 많다고 생각합니다.) 솔루션 중 하나는 수동으로 트레이 아이콘을 보이지 않게 한 다음 표시하는 것입니다.

TrayIcon1.Visible := false; 
TrayIcon1.Visible := true; 

풍선 아이콘을 수동으로 숨길 때 위의 코드를 실행하여 시스템 트레이를 정리하십시오. 이것은 '팬텀'풍선 힌트를 멈출 수 있습니다. 시도 할만한 것.

+0

나는 확실히 그것을 시도하고 다시보고 할 것입니다 - 당신이 "자동 풍선 닫힘을 끄십시오"라고 말할 때 - 제가하고있는 모든 것은 : MainForm.TrayIcon1.BalloonTimeout : = Delayms; MainForm.TrayIcon1.ShowBalloonHint; 그리고 지연이 끝나면 힌트가 닫히기를 기대합니다. 그리고 나서 다시 나타납니다. 그래서 Visible 속성을 토글하는 것이 효과가 있다는 희망은 없지만 시도해 보겠습니다. – rossmcm

+0

Delphi2006을 사용하지는 않지만 프로그래밍 방식으로 Balloon (또는 OnCloseBalloon 이벤트)을 프로그래밍 방식으로 닫을 수 있습니다 (또는 지연 시간 값 바로 전에 트레이 숨기기)? 그게 내가 말했던 것. 아마 롱샷 이겠지 만 가치는 있습니다. 풍선이 보일 때 아이콘을 숨기면 분명히 풍선을 숨길 것입니다. – Simon

+0

저는 빈 문자열과 지연이 0 인 루틴을 호출하여 풍선을 닫았습니다. 그것은 작동 - 잠시 동안! - 그러면 다시 나타납니다. – rossmcm