![]() |
Problem StringGrid-Vergleich
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute!
Ich bin noch ziemlich neu hier und programmiere mit Delphi 7 in der Schule. Unser Projekt ist momentan quasi einen beliebeigen endlichen Automaten zu programmieren, auf Grundlagen einer Automatentabelle. Nachdem man nun die Anzahl der Zustände und Einwirkungsmöglichkeiten einstellen kann, soll das Programm nun die Eingabe mit dem ersten Zeichen in jeder Zelle der Tabelle/ des StringGrids vergleichen. Dazu habe ich diese procedure geschrieben:
Delphi-Quellcode:
Das Problem nun ist: Sie funktioniert nicht. Es kommt jedes Mal die Meldung (wenn ich den Button zum Start drücke):
procedure Eingabe_Reaktion;
var cnt,x,y,x_achse,y_achse:integer; begin x_Achse:=form1.StringGrid1.colcount; y_Achse:=form1.stringgrid1.RowCount; for cnt:=1 to 5 do //Schleife für Zeichen bei Eingabe for x:=2 to x_Achse do //Schleife x-Achse for y:=2 to y_Achse do //Schleife y-Achse if form1.edit3.Text[cnt]=form1.StringGrid1.cells[x,y][1] //Vergleich then form1.Edit4.Text:=form1.edit3.Text[1]; //Ausgabe end; "Access Violation at address 00460719 in module 'Project1.exe'. Read of address 00000000" Kann mir bitte jemand helfen?? LG Topher |
AW: Problem StringGrid-Vergleich
Erstmal ein herzliches Willkommen hier.
Mit dem ersten Beitrag ist man hier nicht nur ziemlich sondern ganz neu ;) Zum Code posten: Bitte benutze doch für Delphi Code die Code Tags
Code:
und ein Code mit der korrekten Einrückung hilft allen beim Verstehen des selbigen.
[DELPHI]hier dein Code[/DELPhI]
Bitte ändere doch deinen ersten Beitrag dahingehend ab. Zu deinem Problem: Du hast in deinem StringGrid x Spalten und y Zeilen. Der Index der ersten Spalte/Zeile ist 0 Somit ist der Index der letzten Spalte
Delphi-Quellcode:
und der letzen Zeile
x - 1
Delphi-Quellcode:
.
y - 1
Greifst du darüber hinaus zu, dann bekommst du diesen Zugriffsfehler. Es ist auch suboptimal eine procedure zu schreiben, die über die globale Form Variable auf die Form zugreift. |
AW: Problem StringGrid-Vergleich
Vielen Dank für die schnelle Antwort! Ja so tritt zumindestens dieser Fehler nicht mehr auf.
|
AW: Problem StringGrid-Vergleich
Delphi speichert sich die beiden Werte am Anfang der FOR-Schleifen, so daß du da keine Extravariablen (x_achse und y_achse) brauchst.
Aber mal eine andere Frage: Warum ist Eingabe_Reaktion keine Methode der Form1, obwohl darin ausschließlich darauf zugegriffen wird? Der grundsätzliche Fehler war übrigens: StringGrid1.cells[x,y][1], denn rate mal was passiert, wenn kein String mit mindestens einem Zechen darin ist. Das Stringgrid selber gibt zum Glück keinen Fehler, wenn man auf nichtexistierende Felder zugreift, sondern gibt stattdessen nur einen Leer-String zurück. Zitat:
Der zeigt dir wo es knallt. Und in diesem Fall hätte man auch mal die Bereichsprüfung in den Projektoptionen aktivieren können. Denn diese baut Prüfcodes ein, wovon Einer z.B. prüft, ob man auf ein nichtexistierendes Zeichen eines Strings zugreifen will, was bei dir ja geknallt hatte. Das Selbe tritt auch auf, wenn in Edit1 nicht mindestens 5 Zeichen drin sind, da du dort auch einfach so ungeprüft drauf zugreifst. Dann mußt du lernen, daß praktisch alles bei 0 anfängt mit Zählen (Listen und dynamische Arrays), außer dem String, welcher kompatibilitätsbedingt bei 1 anfängt.
Delphi-Quellcode:
for x := 1 to x_Achse - 1 do
Info: Der ShortString hatte in Index 0 das Längenbyte und ab 1 die Zeichen, was in die "neueren" LongStrings (AnsiString, UnicodeString und Co.), sowie den WideString übernommen wurde. (also praktisch fingen Strings früher auch mal bei 0 an, wenn man die Indizierung genau nimmt) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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 by Thomas Breitkreuz