Собственно проблема вот в чем, надо поставить графический курсор на начало первой строки, далее - дальнейшее редактирование строки, т.е. сдвиг элементов строки при наборе символов с клавиатуры, передвижение по строке, на строку ниже/выше. Т.е. надо сделать редактирование данного текста в динамической памяти с возможностью дальнейшего сохранения.
Только разбираюсь со связанными списками, а надо очень срочно.....
Напишите, пожалуйста, что и как надо изменить в данном коде, чтобы осуществить хотя бы минимальное редактирование (остальное сам доделаю), подкиньте идеи.
Сделал выдержку из кода основной своей программы, (можно скопировать и откомпилить, работает загрузка текстового файла и прокрутка)
Код: Выделить всё
uses crt, graph;
type
pLine = ^tLine;
tLine = record
PrevLine: pLine;
NextLine: pLine;
Line: string;
end;
Procedure StartGraph;
var
drivervar, modevar, ErrCode: integer;
begin
drivervar:=Detect;
drivervar:=VGA;
Modevar:=VGAhi;
initGraph(DriverVar, ModeVar, 'c:\tp7\bin');
ErrCode:=GraphResult;
if ErrCode <> grOK then
begin
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
halt(1);
end;
end;
procedure whatBtn(var Ch: char);
begin
Ch:=ReadKey;
if Ch = #0 then
Ch:=ReadKey;
end;
procedure ViewScreen(pStr: pLine);
var
i: byte; n:integer;
begin
clrscr; n:=10;
gotoXY(10,n);
for i:=1 to 25 do
begin
OutTextXY(10,n,pStr^.Line);
if pStr^.NextLine = nil then break;
pStr:=pStr^.NextLine;
n:=n+10;
end;
end;
procedure MoveUp(var pStr: pLine);
var
pStrW: pLine;
begin
if pStr^.PrevLine = nil then exit;
pStr:=pStr^.PrevLine;
ViewScreen(pStr);
end;
procedure MoveDown(var pStr: pLine);
begin
if pStr^.NextLine = nil then exit;
pStr:=pStr^.NextLine;
ViewScreen(pStr);
end;
var
filename: string;
flags: boolean;
Ch: Char;
tfile: text;
pStr, pStrW, pStrOne: pLine;
begin
StartGraph;
filename:='text.txt';
flags:=false;
{$I-}
Assign(tfile, filename);
Reset(tfile);
{$I+}
if (IOResult <> 0) or (filename = '') then exit;
new(pStr);
pStrOne:=pStr;
pStr^.PrevLine:=nil;
while not Eof(tFile) do
begin
new(pStrW);
pStr^.NextLine:=pStrW;
Readln(tfile, pStr^.Line);
pStrW^.PrevLine:=pStr;
pStr:=pStrW;
end;
Close(tfile);
pStr:=pStr^.PrevLine;
pStr^.NextLine:=nil;
Dispose(pStrW);
pStr:=pStrOne;
ViewScreen(pStr);
repeat
if keypressed then whatBtn(Ch);
case Ch of
'P','<': MoveDown(pStr);
'H',';': MoveUp(pStr);
#27: flags:=true;
end;
Ch:=#0;
until flags;
while pStr^.NextLine <> nil do
pStr:=pStr^.NextLine;
while pStr <> nil do
begin
pStrW:=pStr;
pStr:=pStrW^.PrevLine;
Dispose(pStrW);
end;
end.