Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zugriffsverletzung bei Anzeigen eines Hints (https://www.delphipraxis.net/162987-zugriffsverletzung-bei-anzeigen-eines-hints.html)

mquadrat 12. Sep 2011 09:58

Zugriffsverletzung bei Anzeigen eines Hints
 
Folgendes Problem bei einer D2007 - Anwendung:

Code:
exception class  : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 004CE110 in Modul 'Application.exe'. Lesen von Adresse 00000004.

004ce110 Application.exe Forms        TMonitor.GetBoundsRect
004ce0ee Application.exe Forms        TMonitor.GetWidth
004ba487 Application.exe Controls     THintWindow.ActivateHint
004ba6af Application.exe Controls     THintWindow.ActivateHintData
004d24fa Application.exe Forms        TApplication.ActivateHint
004d1ec1 Application.exe Forms        TApplication.HintTimerExpired
004cf14e Application.exe Forms        HintTimerProc
7e3696c2 USER32.dll                  DispatchMessageA
004d0e00 Application.exe Forms        TApplication.ProcessMessage
004d0e3a Application.exe Forms        TApplication.HandleMessage
004d112f Application.exe Forms        TApplication.Run
00773fa8 Application.exe Application 97 initialization
Die Anwendung läuft 24/7. Die Zugriffsverletzung wird ausgelöst (nach Benutzerberichten) wenn das Programm via Fernwartung (Teamviewer) aus der Minimierung wieder hergestellt wird. Ich kann das auf meinem Entwicklungssystem allerdings aktuell nicht reproduzieren.

Hat zufälligerweise von Euch jemand eine Idee, wo ich suchen könnte? Mir fehlt da aktuell noch der Ansatz.

s.h.a.r.k 12. Sep 2011 10:08

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
Hast du eine Pro Version von Delphi 2007? Wenn ja dann schau doch mal was beim Aufruf der Methode TMonitor.GetBoundsRect() steht.

Hast du alle Updates für D2007 installiert? Vielleicht bedarf es ja eines Fixes.

Union 12. Sep 2011 10:14

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
TeamViewer basiert ja auf VNC. Und das arbeitet massiv mit Hooks aus Performancegründen. Vielleicht kann man diese "injections" deaktivieren. Das würde ich mal als erstes versuchen.

himitsu 12. Sep 2011 10:21

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
Auf den ersten Blick fallen mit zwei Gründe für diese Exception auf:

Der Prozedurzeiger MultiMon.GetMonitorInfo steht auf urplötzlich NIL.
(TMonitor.GetBoundsRect will darauf zugreifen)

Oder Screen.MonitorFromPoint(Point(Rect.Left, Rect.Top)); in THintWindow.ActivateHint liefert keinen Monitor (also NIL)
und die nachfolgenden Zugriffe wollen dann auf dieses Objekt zugreifen.


Tippen würde ich auf Letzeres, welches versucht den "Monitor" zu dem Hint zu finden.

mquadrat 12. Sep 2011 10:35

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
Wir haben dort jeweils auch noch eine zweite Anwendung im Einsatz, die dieses Verhalten nicht zeigt.. Die betroffene Anwendung hatte mal ein Tray-Icon, das habe ich allerdings bereits entfernt. Da es sowieso auf dedizierten Rechnern läuft, werde ich jetzt erst mal das Minimieren verbieten.

Assertor 12. Sep 2011 11:08

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
Hallo mquadrat,

Problem & Lösung bekannt:
http://qc.embarcadero.com/wc/qcmain.aspx?d=53932

TApplicationEvents nutzen, OnHint Handler zuweisen und folgendes einsetzen:
Delphi-Quellcode:
if Monitor.Handle = 0 then ApplicationEvents1.CancelDispatch;


Gruß,
Assertor

mquadrat 12. Sep 2011 11:41

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
mhh den QualityCentral Eintrag muss ich entweder übersehen haben, oder Google hat ihn nicht gefunden :oops:

Assertor 12. Sep 2011 15:21

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
Zitat:

Zitat von mquadrat (Beitrag 1123577)
mhh den QualityCentral Eintrag muss ich entweder übersehen haben, oder Google hat ihn nicht gefunden :oops:

Macht doch nichts, ich fand nur das "Minimieren verbieten" so brachial, dass ich schnell nachgesehen habe ;)

Viele Grüße,

Assertor

mquadrat 13. Sep 2011 07:34

AW: Zugriffsverletzung bei Anzeigen eines Hints
 
:-D Die Rechner werden für nichts anderes verwendet. Steht zumindest so im Vertrag


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz