Du kannst natuerlich Problerme an ganz anderer Stelle in deinem Programm haben. Wenn du dort die Speicherverwaltung versaust, dann treten die Probleme irgendwann und irgendwo auf. Hier natuerlich besonders wenn du die Speicherverwaltung durch neue Bilder in Anspruch nimmst
Announcement
Collapse
No announcement yet.
Probleme mit: Array[1..7] of array of timage
Collapse
X
-
Probleme mit: Array[1..7] of array of timage
D5E, Win2K<br>
Hallo Zusammen!!!<br>
Folgendes Problem habe ich: Ich erzeuge in dem Array dynamisch mit SetLength und TImage.Create(self) Image-Felder um bestimmte Symbole zu bestimmten Ereignissen (variable Anzahl).<br> Das funktioniert auch soweit, nur wenn ich dann alle Images von aImages[1] freigebe und dann unter aImages[1] neue Erzeuge, dann kommen folgende Fehlermeldungen: Abstrakter Fehler bzw. EAccessViolation. Wir sitzen hier nunmit zwei Entwicklern und können den Fehler einfach nicht finden.<br>
Wer hat eine Idee zu diesem Problem?<br>
<br>
Gruß,<br>
Christian
-
Hallo.<br>
Erstmal den Quellcode zum Erezugen der Images:
<br>
<PRE>
procedure BildErzeugen(i, j: Integer; bSondertermin: Boolean);
begin
if bSondertermin then
begin
SetLength(aSonderImages[i], Length(aSonderImages[i]) + 1);
aSonderImages[i, Length(aSonderImages[i]) - 1] := TImage.Create(nil);
with aSonderImages[i, Length(aSonderImages[i]) - 1] do
begin
Align := alNone;
Parent := aSenkrechtePanels[i];
Left := 1;
Top := aZeitenPanels[i, j + 1].top;
Width := 12;
Height := 14;
if (aBPQrys[i].getStrValue('bestattung_ausgefuehrt') <> 'T') then
Picture := ImageSonderterminRot.Picture
else
Picture := ImageSonderterminBlau.Picture;
OnDblClick := ImageDblClick;
OnMouseDown := ImageMouseDown;
OnMouseUp := ImageMouseUp;
OnMouseMove := ImageMouseMove;
Tag := aBPQrys[i].GetIntValue('id');
PopUpMenu := PopUpMenuBelegteTermine;
Hint := aBPQrys[i].GetStrValue('calcVerstorbener') + #13 + aBPQrys[i].GetStrValue('calcBestatter') + #13 +
aBPQrys[i].GetStrValue('calcGrablage');
ShowHint := true;
Visible := true;
end; {with aSonderImages[i, Length(aSonderImages[i]) - 1]}
end {if bSondertermin}
else
begin
SetLength(aDoppelImages[i], Length(aDoppelImages[i]) + 1);
aDoppelImages[i, Length(aDoppelImages[i]) - 1] := TImage.Create(nil);
with aDoppelImages[i, Length(aDoppelImages[i]) - 1] do
begin
Parent := aZeiten[i, j].Parent;
Height := aZeiten[i, j].Parent.Height;
Align := alRight;
Width := 12;
if (aBPQrys[i].getStrValue('bestattung_ausgefuehrt') <> 'T') then
Picture := ImageDoppelterminRot.Picture
else
Picture := ImageDoppelterminBlau.Picture;
OnDblClick := ImageDblClick;
OnMouseDown := ImageMouseDown;
OnMouseUp := ImageMouseUp;
OnMouseMove := ImageMouseMove;
Tag := aBPQrys[i].GetIntValue('id');
PopUpMenu := PopUpMenuBelegteTermine;
Hint := aBPQrys[i].GetStrValue('calcVerstorbener') + #13 + aBPQrys[i].GetStrValue('calcBestatter') + #13 +
aBPQrys[i].GetStrValue('calcGrablage');
ShowHint := true;
Visible := true;
end; {with aDoppelImages[i, Length(aDoppelImages[i]) - 1]}
end {else}
end;
</PRE>
<br>
Nun der Quellcode zum verwerfen:
<br>
<PRE>
for j := 0 to Length(aSonderImages[iSpalte]) - 1 do
FreeAndNil(aSonderImages[iSpalte, j]);
SetLength(aSonderImages[iSpalte], 0);
for j := 0 to Length(aDoppelImages[iSpalte]) - 1 do
FreeAndNil(aDoppelImages[iSpalte, j]);
SetLength(aDoppelImages[iSpalte], 0);
</PRE>
<br>
<br>
@Robert:<br>
TImage.Create(nil) brachte leider keinen Erfolg.<br>
@all:<br>
es muss quasi an den Images liegen, denn sobald ich die zeilen im Quelltext entferne, funktioniert es.
<br>
Gruß,<br>
Christia
Comment
-
Hallo Torsten.
Das ist ja mein Problem: eben in keiner Zeile. D.h. die Routinen werden alle durchlaufen, erst wenn er scheinbar alles abgearbeitet hat, dann erscheint die Fehlermeldung. Wenn ich die Fehlermeldung zur Seite schiebe, kann in der Programmoberfläche die erstellten Images sehen, nur wird nach Bestätigung der Fehlermeldung das Programm beendet. Ich kann also nicht sehen, wann die Fehlermeldung genau auftritt. Mein Kollege meint, dass das in den Windows-Routinen in der Windows.pas passiert, aber er kann auch nicht sagen wo genau. Könnte da evtl. das Speichermanagement von Windows Stress machen???
<br>
Erstmal ein Danke an alle, die sich bemühen mit mir den Fehler zu finden :-) !!!<br>
<br>
Gruß,<br>
Christia
Comment
Comment