N'abend!
Ich habe es gefunden: Es wird unter Turbo Delphi bei Write() eine andere Funktion aufgerufen als bei WriteLn(). Unter Delphi 5 hatte er IMMER "FlushFunc" aufgerufen. Läuft das Programm in der neueren Version, ruft er bei WriteLN() "FlushFunc" und bei Write() "InOutFunc" auf. So kann man das Teil folgend benutzen:
Delphi-Quellcode:
procedure AssignMemo(var F: Text);
function DeviceOpen(var F: TTextRec): Integer; register;
begin
Result := 0;
end;
function DeviceClose(var F: TTextRec): Integer; register;
begin
Result := 0;
end;
function DeviceFlush(var F: TTextRec): Integer; register;
var
lSt : ShortString;
begin
Result := 0;
case F.Mode of
fmInput:
begin
FillChar(F.BufPtr^,F.BufSize,#0);
F.BufEnd := 1;
F.BufPos := 0;
end;
fmOutput:
begin
lSt[0] := Char(F.BufPos);
Move(F.Buffer,lSt[1],F.BufPos);
with Form1.Memo1 do
Text := Text + lSt; // output F.Buffer here
FillChar(F.BufPtr^,F.BufSize,#0);
F.BufEnd := 1;
F.BufPos := 0;
end;
end;
end;
begin
with TTextRec(F) do
begin
FillChar(F, SizeOf(F), 0);
Mode := fmClosed;
BufSize := SizeOf(Buffer);
BufPtr := @Buffer;
OpenFunc := @DeviceOpen;
InOutFunc := @DeviceFlush;//@DeviceInOut; So läuft das unter Delphi 5 und Turbo Delphi.
FlushFunc := @DeviceFlush;
CloseFunc := @DeviceClose;
end;
end;
Ich habe einfach die Zuweisung angepasst. Für meinen Programmverlauf macht es hier keinen Unterschied ob InOutFunc oder FlushFunc aufgerufen wird.
Schönen Abend noch
Stefan