"Schuld" sind die AlphaControls.
Mehr oder weniger auf Verdacht habe ich die AlphaControls (Alpha Skins) einmal aus meinem Projekt entfernt und damit das Problem behoben.
Es stellen sich mir in dem Zusammenhang zwei Fragen:
1) Wie kann es sein, dass der Compiler die Variable nicht kennt, diese aber beim Start mit F7 sofort in den überwachten Ausdrücken verfügbar ist?
2) Warum greift die Regel nicht, dass Bezeichner innerhalb einer With-Anweisung vorrangig dem "With-Objekt" zugeordnet werden.
Aus der Hilfe: "Jede Variablenreferenz und jeder Methodenname in einer with-Anweisung wird, wenn möglich, als Element des angegebenen Objekts bzw. Records interpretiert. Wenn in der with-Anweisung auf eine andere Variable oder Methode mit demselben Namen zugegriffen werden soll, ist ein Qualifizierer erforderlich:"
PS: Klar kann ich an der Stelle auf "with" verzichten, mich würde aber auch das grundsätzliche Problem interessieren. Ist das Problem nachvollziehbar oder völlig unerklärlich (dann bestünde ja IMMER die Gefahr, dass das Programm zur Laufzeit auf irgendeine Variable zugreift, die dem Compiler noch unbekannt war)?
Delphi-Quellcode:
outputdebugstring(pchar(floattostr(vpe.nbottom))); // = 1.81
with vpe do
outputdebugstring(pchar(floattostr(nbottom))); // = 1.81
...hat gezeigt, dass das With-Problem in der Form gar nicht besteht.
Lediglich beim "Einsehen" der Daten wird vom Debuger auf die falsche (nicht gemeinte) Variable zurückgegriffen.
Es wäre in dem Zusammenhang sicher wünschenswert, wenn dieser im Hint bei MouseOver den With-Bezug erkennen würde.
Die erste Frage bleibt aber m.E. durchaus berechtigt bestehen... So
Stahli