Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Autovervollständigen geht manchmal nicht (https://www.delphipraxis.net/196619-autovervollstaendigen-geht-manchmal-nicht.html)

Edelfix 4. Jun 2018 13:13

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?

himitsu 4. Jun 2018 13:18

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.

Edelfix 4. Jun 2018 13:57

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.

Uwe Raabe 4. Jun 2018 14:02

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403834)
Habe ich entfernt und IDE neu gestartet. Hat leider nicht geholfen.

Kannst den Code denn überhaupt compilieren?

Edelfix 4. Jun 2018 15:11

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.

jaenicke 4. Jun 2018 19:34

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.

Edelfix 5. Jun 2018 08:38

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.

TiGü 5. Jun 2018 09:01

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403919)
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.

Das Forum bietet zahlreiche Threads dazu. Hier zum Beispiel:
https://www.delphipraxis.net/174414-...ement-xe4.html

Edelfix 5. Jun 2018 10:00

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?

Uwe Raabe 5. Jun 2018 10:13

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403927)
@TiGü. Das scheint eine allgemeine Philosophische Diskussion zu sein.

Das glaube ich eher nicht. Es geht hier mehr darum, den Code robuster zu machen.

Zitat:

Zitat von Edelfix (Beitrag 1403927)
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?

Es tritt eben gar kein Fehler auf. Das Programm tut nur plötzlich was anderes.

Konkretes Beispiel, über das sicher viele hier gestolpert sind: Ein
Delphi-Quellcode:
TRect
hatte in früheren Delphi Versionen die Eigenschaften
Delphi-Quellcode:
Left
,
Delphi-Quellcode:
Top
,
Delphi-Quellcode:
Right
und
Delphi-Quellcode:
Bottom
. Wollte man nun z.B. in einer Methode ein Rechteck links auf die halbe Breite des aktuellen Forms setzen, konnte man das mit
Delphi-Quellcode:
with MyRect do begin
  Left := Width div 2;
end;
erreichen. Da
Delphi-Quellcode:
Width
in
Delphi-Quellcode:
TRect
nicht bekannt ist, wird der nächsthöhere Scope (in diesem Fall das Form) verwendet.

Irgendwann bekam
Delphi-Quellcode:
TRect
aber noch ein Property
Delphi-Quellcode:
Width
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.

TiGü 5. Jun 2018 10:25

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;

Edelfix 5. Jun 2018 11:03

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.

himitsu 5. Jun 2018 11:39

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403919)
Ich lese immer wieder dass man auf "with" verzichten soll. Was ist die Begründung?

Delphi-Quellcode:
procedure TForm1.irgendwas();
begin
  with IrgendwasMitTRect do
    Width := Right - Left;
end;
Das ging viele Jahrzehnte gut, bis Delphi-Referenz durchsuchenSystem.Types.TRect.Width erfunden wurde. :stupid:

Delphi-Quellcode:
Self.Width := Rect.Right - Rect.Left;
// wurde zu
Rect.Width := Rect.Right - Rect.Left;

Edelfix 5. Jun 2018 13:44

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?

TiGü 5. Jun 2018 13:48

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403953)
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?

Debuggt ihr eure Anwendungen nicht?

himitsu 5. Jun 2018 13:50

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.

Uwe Raabe 5. Jun 2018 14:27

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403953)
sollte ich das Gespräch von ober erst gar nicht anfangen?

Definitiv nicht! Solche Dinge erledigt man besser in Eigenverantwortung ohne zu fragen.

Elrond 5. Jun 2018 14:32

AW: Autovervollständigen geht manchmal nicht
 
Zitat:

Zitat von Edelfix (Beitrag 1403953)
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?

Das ganze ist, wie du richtig erkannt hast, ein philosophische Diskussion.
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 04:51 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