![]() |
Zugriffsverletzung in Procedure
also ich hab mir mal ne procedure gebastelt, die ein memo mit zufälligen zeichen füllen soll. keine sorge, 100 zeilen dieses codes sind eine case of anweisung! aber die zeile
Delphi-Quellcode:
verursacht eine zugriffsverletzung. hier nun das ganze script:
Buffer.Lines[i] := zeile
Delphi-Quellcode:
wieso funzt das nich?
procedure create_mem(Memo: TMemo);
var i, zeilen, zeilenlen, x, zeichenr: integer; zeichen, zeile : string; Buffer: TMemo; begin randomize; zeilen := random(80); for i := 1 to zeilen do begin zeilenlen := random(50); for x := 0 to zeilenlen do begin zeichenr := random(98); case zeichenr of 0: zeichen := ' '; 1: zeichen := ' '; 2: zeichen := 'a'; 3: zeichen := 'b'; 4: zeichen := 'c'; 5: zeichen := 'd'; 6: zeichen := 'e'; 7: zeichen := 'f'; 8: zeichen := 'g'; 9: zeichen := 'h'; 10:zeichen := 'i'; 11:zeichen := 'j'; 12:zeichen := 'k'; 13:zeichen := 'l'; 14:zeichen := 'm'; 15:zeichen := 'n'; 16:zeichen := 'o'; 17:zeichen := 'p'; 18:zeichen := 'q'; 19:zeichen := 'r'; 20:zeichen := 's'; 21:zeichen := 't'; 22:zeichen := 'u'; 23:zeichen := 'v'; 24:zeichen := 'w'; 25:zeichen := 'x'; 26:zeichen := 'y'; 27:zeichen := 'z'; 28:zeichen := '1'; 29:zeichen := '2'; 30:zeichen := '3'; 31:zeichen := '4'; 32:zeichen := '5'; 33:zeichen := '6'; 34:zeichen := '7'; 35:zeichen := '8'; 36:zeichen := '9'; 37:zeichen := '0'; 38:zeichen := '+'; 39:zeichen := '*'; 40:zeichen := '#'; 41:zeichen := '~'; 42:zeichen := ''''; 43:zeichen := '-'; 44:zeichen := '.'; 45:zeichen := ':'; 46:zeichen := ';'; 47:zeichen := ':'; 48:zeichen := '_'; 49:zeichen := '!'; 50:zeichen := '"'; 51:zeichen := '§'; 52:zeichen := '$'; 53:zeichen := '%'; 54:zeichen := '&'; 55:zeichen := '/'; 56:zeichen := '('; 57:zeichen := ')'; 58:zeichen := '='; 59:zeichen := '?'; 60:zeichen := '@'; 61:zeichen := '€'; 62:zeichen := '²'; 63:zeichen := '³'; 64:zeichen := '['; 65:zeichen := ']'; 66:zeichen := '{'; 67:zeichen := '}'; 68:zeichen := 'ß'; 69:zeichen := '\'; 70:zeichen := '<'; 71:zeichen := '>'; 72:zeichen := '|'; 73:zeichen := 'A'; 74:zeichen := 'B'; 75:zeichen := 'C'; 76:zeichen := 'D'; 77:zeichen := 'E'; 78:zeichen := 'F'; 79:zeichen := 'G'; 80:zeichen := 'H'; 81:zeichen := 'I'; 82:zeichen := 'J'; 83:zeichen := 'K'; 84:zeichen := 'L'; 85:zeichen := 'M'; 86:zeichen := 'N'; 87:zeichen := 'O'; 88:zeichen := 'P'; 89:zeichen := 'Q'; 90:zeichen := 'R'; 91:zeichen := 'S'; 92:zeichen := 'T'; 93:zeichen := 'U'; 94:zeichen := 'V'; 95:zeichen := 'W'; 96:zeichen := 'X'; 97:zeichen := 'Y'; 98:zeichen := 'Z'; end; zeile := zeile + zeichen; end; Buffer.Lines[i] := zeile; end; Memo.Text := Buffer.Text; end; *MFG & THX* |
Re: Zugriffsverletzung in Procedure
Nimm anstelle Buffer.Lines[i] := zeile am besten ein Buffer.Lines.Add(zeile);
Und initialisier zeile am Anfang am besten noch mit einem leeren String. |
Re: Zugriffsverletzung in Procedure
ne... hat nix genützt!
|
Re: Zugriffsverletzung in Procedure
Die Zugriffs Verletzung entsteht da es an der i-ten Position noch keine Zeile gibt.
Und BITTE überdenke dein case n of 0..26: zeichen := char(zeichenr) Und BITTE nutze ungarische notationen var i, iZeilen, iZeilenLen, x, iZeichen : integer; sZeichen, sZeile : string; kann man wesentlich besser lesen. :wink: dann find ich den Fehler auch besse :wink: |
Re: Zugriffsverletzung in Procedure
ich würde das memo auch vorher erstellen
Delphi-Quellcode:
so solltes gehn
Buffer := TMemo.Create(nil);
mfG mirage228 |
Re: Zugriffsverletzung in Procedure
@ mirage hab ich jetzt gemacht, jetzt krieg ich nen fehler
Delphi-Quellcode:
...
Element " hat kein übvergeordnetes Fenster
:coder: |
Re: Zugriffsverletzung in Procedure
Jetzt seh ich's
Du brauchst kein Memo erstellen sondern es reicht wenn du ein TStringList-Object erstellst... |
Re: Zugriffsverletzung in Procedure
jetzt krieg ich nen fehler
Delphi-Quellcode:
Listenindex überschreitet das maximum!
|
Re: Zugriffsverletzung in Procedure
dann würde ich anstatt
Delphi-Quellcode:
schreiben:
Buffer := TMemo.Create(nil);
Delphi-Quellcode:
und dann "Buffer.Name := 'Buffer'";
Buffer := TMemo.Create(Application.MainForm);
mfG mirage228 |
Re: Zugriffsverletzung in Procedure
Delphi-Quellcode:
...
Element Buffer hat kein übergeordnetes Fenster
:freak: |
Re: Zugriffsverletzung in Procedure
Der Constructor von TMemo erwartet doch nur AOwner: TComponent als Parameter, da müsste "Application.MainForm" klappen. Bei mir klappt das so (D3 Prof.). Hast du buffer auch als TMemo deklariert?
Delphi-Quellcode:
Buffer := TMemo.Create(Application.MainForm);
Buffer.Parent := Application.MainForm; Buffer.Name := 'Buffer'; |
Re: Zugriffsverletzung in Procedure
Mal ne saubere alternative....
Delphi-Quellcode:
procedure create_mem(Memo: TMemo);
const csZeichen : array [0..97] of char = 'ABC zeichen noch eingeben'; var y, iZeilen, iZeilenLen, x : integer; sZeile : string; lstBuf : TStringList; begin randomize; lstBuf := TStringList.Create; try iZeilen := random(80); for y := 1 to iZeilen do begin iZeilenLen := random(50); sZeile := ''; for x := 0 to iZeilenLen do sZeile := sZeile + csZeichen[random(98)]; lstBuf.Add(sZeile); end; Memo.Clear; Memo.Lines.Assign(lstBuf); finally lstBuf.Free; end; end; |
Re: Zugriffsverletzung in Procedure
saubere variante, die genau die gleiche exeption auslöst!
|
Re: Zugriffsverletzung in Procedure
Wart mal kurz ich probier sie mal aus...
|
Re: Zugriffsverletzung in Procedure
@ mirage ok, die exeption is weg. aber jetzt füllt er das memo nur mit Buffer!
|
Re: Zugriffsverletzung in Procedure
ich würde Buffer nach dem createn dann vllt leeren (Buffer.Clear) und dann die Zeilen mit Buffer.Lines.Add(...); hinzufügen, so müsstes gehen.
mfG mirage228 |
Re: Zugriffsverletzung in Procedure
ich wüst nicht wieso. das is ja schon created!
|
Re: Zugriffsverletzung in Procedure
Getestet und Läuft...
Was übergibst du bei dem Parameter Memo? Und den csZeichen würde ich vor noch mit Zeichen auffüllen ABC war nur ein Bsp. |
Re: Zugriffsverletzung in Procedure
ich ruf das so auf:
Delphi-Quellcode:
create_mem(memo1)
|
Re: Zugriffsverletzung in Procedure
Poste mal den Stand der Funktion!
Wie gesagt bei geht es wunderbar. |
Re: Zugriffsverletzung in Procedure
ok alles klar, hab den fehler gefunden! jetzt funzts!
BIG THX all |
Re: Zugriffsverletzung in Procedure
Und was war der Fehler?????? :?:
|
Re: Zugriffsverletzung in Procedure
ich hatte das ABC... noch nicht aufgefüllt!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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-2025 by Thomas Breitkreuz