Einzelnen Beitrag anzeigen

Informatik2012

Registriert seit: 30. Mai 2011
30 Beiträge
 
#1

Access Violation bei Array of TImage.

  Alt 29. Nov 2011, 23:06
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;
  Mit Zitat antworten Zitat