Hallo,
ich bin neu hier im Forum und programmiere schon seit einigen Jahren sporadisch mit Delphi. Da ich noch nie ein Buch gelesen habe und folglich mein gesamtes Wissen auf learning by doing basiert ist es auch recht verstreut. Es kann also sein, dass ich zwar mit "normalen" Variablen umgehen kann aber z.B. keine Ahnung von Pointern habe.(Daher wahrscheinlich auch meine Schwierigkeiten)
Nun zu meinem Problem: Ich bin dabei ein Dienstzeitblatt für meine Zivildienststelle zu programmieren (ich könnte es zwar auch mit Excel machen, aber ich brauche was zu tun

). Das Programm erstellt bisher die benötigten Editfelder und man kann über eine Monats- und Jahresangabe ihre Anzahl verändern.
Das Problem liegt darin, dass wenn ich das Programm nach der Erstellung der Edits verlasse entweder ein EInvalidPointer (beim Kompilieren) oder ein Runtime Error 216 (Normalstart). Wenn ich das Programm beende, bevor ich die Edits erstellt habe kommt dieser Fehler nicht. Ich habe auch schon die Suche benutzt habe aber leider keine passende Lösung gefunden, da ich z.B. keine onclose-Prozdur habe.
Hier mal der Quelltext:
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: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| type TForm1 = class(TForm) Label1: TLabel; MainMenu1: TMainMenu; Datei1: TMenuItem; Neu1: TMenuItem; Beenden1: TMenuItem; Procedure edits; procedure Neu1Click(Sender: TObject); procedure Menge; private public end;
var Form1: TForm1; Daten: array of real; EditsArray: Array of TEdit; TZahl: integer; implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.edits; var i,r,z : Integer; begin Menge; z:=1; SetLength(EditsArray, Tzahl*10); SetLength(Daten, Tzahl*10); for r:=1 to TZahl do begin for i:=1 to 10 do begin EditsArray[z] := TEdit.Create(self); with EditsArray[z] do begin parent := self; width:=20; left := i * width + 5; top := r * 25; name := 'edit'+IntToStr(z); text := '5'; Daten[i]:=strtofloat(text); z:=z+1; end; end; end; label1.caption:=floattostr(Daten[2]); end;
procedure Tform1.Menge; var t:integer; begin case Jahr.m of 1:TZahl:=31; 2: begin TZahl:=28; for t:=0 to 100 do if Jahr.j=2007+4*t then Tzahl:=29; end; 3:TZahl:=31; 4:TZahl:=30; 5:TZahl:=31; 6:TZahl:=30; 7:TZahl:=31; 8:TZahl:=31; 9:TZahl:=30; 10:TZahl:=31; 11:TZahl:=30; 12:TZahl:=31; end; label1.caption:=inttostr(TZahl); end; |
Ich hoffe mir kann jemand helfen
