Thema: Delphi Zugriffsverletzung

Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Zugriffsverletzung

  Alt 4. Jun 2008, 12:48
Wie schon angedeutet ist der jetzige Code der falsche Weg. Du hast hier massive Probleme und man diese deutlich darauf schieben, dass du in deinem Code-Design nicht Datenverarbeitung und Datendarstellung trennst. Deine Oberfläche soll nur die Daten darstellen, aber nicht halten oder als Basis der Verarbeitung dienen. Wäre dies beachtet worden, dann hättest du vllt. noch falsch angezeigte Oberflächenteile, aber immerhin einen richtigen Programmablauf mit dem richtig ermittelten Status (gewonnen, etc).

Also nochmals als eindringlicher Hinweis: Lege dir ein zweidimensionales Array an, wo du die Werte drin hälst und aktualisiere deine Panels entsprechend den Daten aus diesem Array.

Auch ist der Name einer Komponente Schall und Rauch und sollte niemals Einfluß auf den Programmablauf haben, ansonsten wäre es ein sicheres Zeichen, dass die Oberfläche nicht getrennt wäre. Somit: Lege dir als privaten Member ein 2-Dimensionales Array (oder eindimensional, also MOD/DIV nutzen) an in deiner Form, in der du die Panelinstanzen entsprechend hinterlegst. Danach kannst du beim aktualisieren der Oberfläche sogar direkt von Array-Element (Daten) zu Array-Element (Darstellung) arbeiten. Irgendwelche Unsicherheiten mit eventuell nicht gefundenen Panels sind damit schon von vornherein ausgeschlossen.

Wer FindComponent() und das nicht gerade in einem eigenen, allgemeinen GUI Streaming Clienten o.ä., der hat falsch programmiert. Diese Funktion ist langsam und wenn man sie dann noch falsch einsetzt (Rückgabewert überprüfen), dann kommt es zu solchen Fehlerausprägungen. Im Normalfall hat man seine nötigen Instanzen fest hinterlegt und arbeitet mit ihnen, aber sucht sie nicht ständig. Das wäre wie jeden Pinsel während des Zeichnens direkt auswaschen und verwahren um ihn dann alle paar Sekunden erneut aus dem Schrank zu holen zum Zeichnen und danach gleich wieder saubermachen und in den Schrank weglegen. Und wenn du schon selber sagst, dass die Routine ständig/oft aufgerufen wird, dann wäre spätestens dies das KO-Kriterium für FindComponent(), selbst bei Programmen ohne Daten/Oberflächentrennung.
  Mit Zitat antworten Zitat