Frage

Der folgende Code wird aus der Symbolleiste2000 reproduziert. Es ist Teil der Routine, die Symbolleiste und Dock -Zustände aus einer INI -Datei liest. Ich nenne diese Routine während der Initialisierung. Dieser nachstehende Code wird alle Komponenten im Hauptformular (Eigentümerkomponent) iteriert und die Einstellungen aller gefundenen Symbolleisten geladen.

for I := 0 to OwnerComponent.ComponentCount-1 do begin
  ToolWindow := OwnerComponent.Components[I];  //  <------------------------
....

Diese Iteration dauert einige Zeit (Sekunden - es gibt 1500 -ODD -Komponenten auf dem Formular) und ich erhalte am gezeigten Punkt einen Bereichsfehler. Ich habe festgestellt, dass ein oder mehrere Elemente während dieser Schleife aus den Komponenten der Hauptform ausgesetzt werden ein "Abfall" für Schleife, um dies zu verhindern).

Wie auch immer, ich muss herausfinden, wo die Hauptform eine Komponente verliert. Kann mir jemand Debugging -Tipps in Delphi 2006 geben, wie das geht? Ich würde nicht erwarten, dass sich an diesem Punkt in meinem Programm befassen werden, dass eine Hauptform -Komponenten befreit werden.

AKTUALISIEREN

Ich stellte fest, dass ich sie versehentlich in eine andere Symbolleiste angedockt hatte, als ich die Standarddockposition einer Symbolleiste bei der Entwurfszeit neu positionierte, anstatt die Dock-Site, in der die andere Symbolleiste war. Ich habe das Problem behoben, indem ich die Symbolleiste aus der Symbolleiste entlastete Angezeigt und fügen Sie es stattdessen zum Dock hinzu. Die Anordnung, die das Problem verursachte, war also:

Dock 
  Toolbar 1
    Control 1
    Control 2
    Toolbar 2
      Control 3
      Control 4

Und die Lösung bestand darin, sie so zu arrangieren:

Dock 
  Toolbar 1
    Control 1
    Control 2
  Toolbar 2
    Control 3
    Control 4

Es zeigt jedoch immer noch auf einen Fehler im TB2K -Code - man würde annehmen, dass es in der Lage sein sollte, verschachtelte Symbolleisten zu verarbeiten.

War es hilfreich?

Lösung

Zusätzlich zu Lievens Antwort können Sie Debug -DCUs auch verwenden und einen Haltepunkt in tcomponent.destroy kurz bevor Sie die Schleife betreten.

In beiden Fällen müssen Sie den Anrufstapel untersuchen, um festzustellen, woher der Anruf/die Änderung zum Zählen kommt.

Ein sehr interessanter Artikel über Haltepunkte wurde von Cary Jensen geschrieben: http://caryjensen.blogspot.com/2010/08/breakpoints-with-side-effects.html

Andere Tipps

Sie müssen a hinzufügen Datenbestand bei @Self.FComponents.FCount zu brechen, wenn sich die Anzahl ändert.

  • ComponentCount ist eine Eigenschaft, die den Wert zurückgibt? GetComponentCount
  • GetComponentCount kehrt zurück FComponents.Count.
  • FComponents ist ein TList Instanz, die eine private hat FCount Variable.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top