Also. Ich habe ein Array von TImage erstellt. Und da kommt manchmal eine
Access Violation.
Delphi-Quellcode:
var
Form1: TForm1;
Kal : Array[1..24] of TWeihnachtskalendereintrag;
Images : Array[1..24] of TImage;
Number : Integer;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
//MediaPlayer1.Stop;
for i := 1 to 24 do
begin
Kal[i].Free;
Images[i].Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i,k : integer;
begin
Memo1.Clear;
Memo1.Lines.LoadFromFile('speicher.txt');
Number := StrToInt(Memo1.Text);
Images[1] := Image2;
Images[2] := Image3;
Images[3] := Image4;
Images[4] := Image5;
Images[5] := Image6;
Images[6] := Image7;
Images[7] := Image8;
Images[8] := Image9;
Images[9] := Image10;
Images[10] := Image11;
Images[11] := Image12;
Images[12] := Image13;
Images[13] := Image14;
Images[14] := Image15;
Images[15] := Image16;
Images[16] := Image17;
Images[17] := Image18;
Images[18] := Image19;
Images[19] := Image20;
Images[20] := Image21;
Images[21] := Image22;
Images[22] := Image23;
Images[23] := Image24;
Images[24] := Image25;
if Number = 0 then
begin
Image1.Picture.LoadFromFile('picture\0.bmp');
end else
begin
Image1.Picture.LoadFromFile('picture\'+IntTOStr(Number)+'.bmp');
for k := 1 to Number do
begin
Images[k].Picture.LoadFromFile(Kal[k].GibAnzeigeBild);
//Image2.Picture.LoadFromFile(Kal[2].GibAnzeigeBild);
end;
end;
Images ist das besagte Array.
Und es kommt immer eine
Access Violation bei Adresse 0x000000 oder so ähnlich und zwar immer beim untersten IF und zwar im ELSE Zweig. also quasi beim Laden des Bildes, aber ich kann mir nicht erklärenn wieso.
Die Datei Speicher.txt wird mit folgender Procedure verändert.
Delphi-Quellcode:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i : integer;
bool : integer;
year,month,day : word;
begin
for i := 1 to 24 do
begin
if ((X>Kal[i].GibX_Koo)and(X<(Kal[i].GibX_Koo+Kal[i].GibTuerBreite)) and (Y>Kal[i].GibY_Koo)and (Y<(Kal[i].GibY_Koo+Kal[i].GibTuerHoehe))) then
begin
bool := i;
end;
end;
DecodeDate(Now,year,month,day);
if bool <= day then
begin
if kal[bool].GibGeoeffnet = false then
begin
Images[bool].Picture.LoadFromFile(kal[bool].GibAnzeigeBild);
Images[bool].Visible := true;
MediaPlayer1.FileName:=Kal[bool].GibLink;
MediaPlayer1.Open;
MediaPlayer1.Play;
end else
begin
MediaPlayer1.FileName:=Kal[bool].GibLink;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
if bool = Number +1 then
begin
Memo1.Text := IntToStr(Bool);
Memo1.Lines.SaveToFile('Speicher.txt');
end;
end;
end;