Ich habe hier ein TP-Problem. Ich wollt es auch unter FP testen, aber wegen den ganzen genutzten Assembler-Befehlen war das nicht möglich.
Ich habe eine Funktion die Im Textmodus die Bilddaten ausliest und sie in einem Array ablegt.
Das Array habe mit folgendem in als Typ deklariert.
Code: Alles auswählen
Type
ScreenAreaArray = Array[0..159, 0..24] of UInt8;
Ich habe in der Funktion, die die Funktion zum sichern der Bildschirmdaten aufruft eine Variabel als diesen Datentyp festgelegt.
Code: Alles auswählen
SA: ScreenAreaArray;
Die Bilddaten lese ich folgendermaßen aus.
Code: Alles auswählen
For IndexY := 0 to (Height - 1) do
For IndexX := 0 to (Width - 1) do
begin
CursorPositionSet(Page, X + IndexX, Y + IndexY);
CharReadCurrent(Page, Char2Temp, ForegroundColor, BackgroundColor);
ScreenArray[XTemp, IndexY] := Asc(Char2Temp);
ScreenArray[XTemp+1, IndexY] := ForegroundColor + (BackgroundColor * 16);
Inc(XTemp, 2);
end;
Wenn ich diese Funktion aus einer anderen Funktion aufrufe, ändern sich Daten in der vorherigen Funktion.
Ich sehe absolut Grund, wieso dieser Fehler auftaucht.
Was mache ich falsch?
Gruß vom Nixsager
Nachtrag:
So wie ich jetzt heraus gefunden habe, scheint die Funktion zum zeichen der Daten auf dem Bildschirm dafür irgendwie mitverantwortlich zu sein.
In der Prozedur habe ich den Parameter der für den Array ist als Variabel deklariert.
Aber in der Prozedur lesen ich das Array nur aus.
Nehmen ich die Variabel-Deklaration weg, kriege ich Stack-Überlauf.
Hier der Code mit dem ich den Inhalt des Array auf dem Bildschirm zeichne.
Code: Alles auswählen
For IndexY := 0 to (Height - 1) do
For IndexX := 0 to (Width - 1) do
begin
CharTemp := ScreenArray[XTemp, IndexY];
CharColorPaint(Chr(CharTemp), 1, Page, IndexX + X, IndexY + Y,
(ScreenArray[XTemp+1, IndexY] DIV 16), (ScreenArray[XTemp+1, IndexY] MOD 16));
Inc(XTemp, 2);
end;