![]() |
Autovervollständigen geht manchmal nicht
In einem sehr großen Projekt habe ich in manchen Units das Problem das Autovervollständigen nicht funktioniert. In anderen Units geht es. Ohne neu Start der IDE. Ich wechsle nur direkt von Unit zu Unit und habe unterschiedliches Verhalten. Die Eieruhr läuft kurz an aber es passiert nichts.
Eine Idee woran es liegen kann? |
AW: Autovervollständigen geht manchmal nicht
Für diese Funktion wird im Hintergrund oft der Backgroundcompiler angeworden ... wenn er z.B. irgendwo Probleme im dem Quellcode hat, dann raucht er still und heimlich ab und da er keine Infos lieferte, kann dann auch nichts angezeigt werden.
IDFEFs und Dergleichen im Code kann sowas verursachen. |
AW: Autovervollständigen geht manchmal nicht
Du meinst wahrscheinlich ein Compiler Schalter wie $ifdef. Kommt einmal vor.
Habe ich entfernt und IDE neu gestartet. Hat leider nicht geholfen. |
AW: Autovervollständigen geht manchmal nicht
Zitat:
|
AW: Autovervollständigen geht manchmal nicht
Compilieren, Erzeugen und Bereinigen alles ohne Probleme.
Ich vermute das in einer fremd Komponente oder in den Uses der Unit steckt die Antwort. |
AW: Autovervollständigen geht manchmal nicht
Bei uns waren die häufigsten Ursachen with und Kreuzreferenzen. Die neue Codebasis ist sauber, da gibt es so etwas nicht mehr und dort haben wir auch keine Probleme mehr mit der Syntaxergänzung.
|
AW: Autovervollständigen geht manchmal nicht
Ich arbeite erst seit 3 Jahren mit Delphi. Ich lese immer wieder dass man auf "with" verzichten soll. Was ist die Begründung? Oder ist das nur ein Verdacht dass es ab und zu Probleme macht?
In der Problem Unit wird es 67 mal verwendet. Ich würde gern wissen warum es raus sollte. |
AW: Autovervollständigen geht manchmal nicht
Zitat:
![]() |
AW: Autovervollständigen geht manchmal nicht
@TiGü. Das scheint eine allgemeine Philosophische Diskussion zu sein. Was genau ist das Problem mit "with"? Was ist mit "Scope Problem" gemeint? Ist es ein Fehler der bei den Compilern auftritt oder ist es ein Fehler der beim Debuggen auftritt? Lässt sich das nachstellen?
|
AW: Autovervollständigen geht manchmal nicht
Zitat:
Zitat:
Konkretes Beispiel, über das sicher viele hier gestolpert sind: Ein
Delphi-Quellcode:
hatte in früheren Delphi Versionen die Eigenschaften
TRect
Delphi-Quellcode:
,
Left
Delphi-Quellcode:
,
Top
Delphi-Quellcode:
und
Right
Delphi-Quellcode:
. Wollte man nun z.B. in einer Methode ein Rechteck links auf die halbe Breite des aktuellen Forms setzen, konnte man das mit
Bottom
Delphi-Quellcode:
erreichen. Da
with MyRect do begin
Left := Width div 2; end;
Delphi-Quellcode:
in
Width
Delphi-Quellcode:
nicht bekannt ist, wird der nächsthöhere Scope (in diesem Fall das Form) verwendet.
TRect
Irgendwann bekam
Delphi-Quellcode:
aber noch ein Property
TRect
Delphi-Quellcode:
spendiert, was dann innerhalb des with nun den Vorzug bekam. Alles compiliert immer noch einwandfrei, kein Fehler zur Laufzeit, aber das Ergebnis war ein völlig anderes.
Width
|
AW: Autovervollständigen geht manchmal nicht
Außerdem kannst du nicht innerhalb eines With-Statement-Blocks debuggen. Das ist der größte Horror.
Sag mir mal hier die Werte für Count, Sorted und CaseSensitive:
Delphi-Quellcode:
procedure Test;
var StringList: TStringList; begin with TStringList.Create do begin Add('asdfasdf'); if Count > 0 then begin Sorted := CaseSensitive; end; Free; end; end; |
AW: Autovervollständigen geht manchmal nicht
Danke für die Hinweise. Ich habe den Fehler finden können.
Es war tatsächlich eine Kreuzreferenz. Vielen Dank nochmal an alle. |
AW: Autovervollständigen geht manchmal nicht
Zitat:
Delphi-Quellcode:
Das ging viele Jahrzehnte gut, bis
procedure TForm1.irgendwas();
begin with IrgendwasMitTRect do Width := Right - Left; end; ![]()
Delphi-Quellcode:
Self.Width := Rect.Right - Rect.Left;
// wurde zu Rect.Width := Rect.Right - Rect.Left; |
AW: Autovervollständigen geht manchmal nicht
Worum es mir geht ist eher so ein Dialog:
Ich: "Hey Chef wir sollte auf "with" verzichten." Chef: "Warum das denn?" Ich: "Weil das früher in TRect Probleme gab." Chef: "Wir haben Delghi 10.2 im Einsatz. Was interessieren mich Probleme von Gestern?" Gibt es aktuelle Beispiel oder sollte ich das Gespräch von ober erst gar nicht anfangen? |
AW: Autovervollständigen geht manchmal nicht
Zitat:
|
AW: Autovervollständigen geht manchmal nicht
Das ist ein Beispiel für ein eventuell "zukünftiges" Problem.
Früher ging es mal, dann wurden Klassen/Records umgebaut/erweitert und plötzlich ging es nicht mehr, aber es knallt meistens auch nicht, wenn plötzlich etwas doppelt vorhanden ist, in verschiedenen Namespaces. ALSO, jetzt geht es in 10.2, aber in 10.4 könnte es wieder anders aussehn. |
AW: Autovervollständigen geht manchmal nicht
Zitat:
|
AW: Autovervollständigen geht manchmal nicht
Zitat:
Man sollte die Nachteile kennen und die gegen die Vorteile abwägen, das gilt aber eigentlich für so ziemlich alles. Ich persönliche Verwende with nur wenn die Lesbarkeit dadurch merklich erhöht wird. Beispielsweise für eigene Konfigurationsobjekte, da kommt niemand in die Quere. Das mit den Debuggen stimmt und das sollte man bedenken, jedoch muss ich aber sagen, wann genau funktioniert das Debuggen überhaupt? Meist sehe ich nichtssagende Speicheradressen oder "Ausdruck lässt sich nicht auswerten" oder mal lässt er sich auswerten aber dann nicht Überwachen. Möchte man komplexere Objekte zur Laufzeit durchdringen hat man schnell 10 weitere Fenster offen, dank fehlender Autovervollständigung muss man auch immer hin und her springen. Am ende wird die kritische Stelle einfach extra für das Debuggen präpariert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz