Hallo!
Ich habe folgenden Record definiert, der als Datensatz in eine typisierte Datei gespeichert werden soll. Jeder Datensatz soll ein Wort, dessen Silben und ein dazu passendes Bild aufnehmen (Mir ist bewusst, dass das auch einfacher und eleganter geht, aber ich möchte experimentieren):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Type TWort = record gWort : String[80]; Silbe : Array[1..10] of String[8]; SZahl : Integer; Bild : TBitmap; end; Var Wort : TWort; |
Es gelingt mir, in einer Eingabeform (Form3) das Wort nebst Silben einzugeben, das passende Bild als Bitmap (200x200) in eine Imagekomponente zu laden und den Datensatz zu speichern. In der folgenden Routine möchte ich die Datei zum Testen lesen und wieder in das Eingabeformular einfügen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure TForm3.Button4Click(Sender: TObject); var ui, uj : Byte; hWort : String; begin if hz=0 then begin Assignfile(WDatei,WDatOrt); reset(WDatei); DOpenFlag:=true; hz:=FileSize(WDatei); if mz=0 then begin ui:=0; end; end; ui:=succ(ui); mz:=ui; if ui<=hz then begin seek(Wdatei,ui-1); read(WDatei,Wort); Edit1.Text:=Wort.gWort; hWort:=''; for uj:=1 to Neuwort.SZahl do hWort:=hWort+Neuwort.Silbe[ui]; Edit2.Text:=hWort; Image1.Picture.Bitmap:=Wort.Bild; end else begin closefile(WDatei); DOpenFlag:=false; Button4.Visible:=false; end; end; . . . Initialization ui:=0; hz:=0;
end. |
Dabei führt die oben mit Sternchen markierte Zeile zu der Fehlermeldung:
Im Projekt SilDatGen401.exe ist eine Exception der Klasse EAccessViolation mit der Meldung ’Zugriffsverletzung bei Adresse 00420DA1 im Modul SilDatGen401.exe’ Lesen von Adresse 00000049’ aufgetreten.
Kann mir das jemand erklären?
Vielen Dank für eure Unterstützung!
MfG
Moderiert von
raziel: Delphi-Tags hinzugefügt.