📄 dxansi.pas
字号:
End;
'K': Begin
AvState := 0;
If Assigned(fClearToEOL) then
fClearToEOL;
End;
'L': Begin // 01-20-2002 Ozz
AvState := 0;
if Ansiparm[1]=0 Then Ansiparm[1]:=1;
While Ansiparm[1]>0 do Begin
if Assigned(fInsertLine) then fInsertLine;
Dec(Ansiparm[1]);
End;
End;
'M': Begin // 01-20-2002 Ozz
AvState := 0;
if Ansiparm[1]=0 Then Ansiparm[1]:=1;
While Ansiparm[1]>0 do Begin
if Assigned(fDeleteLine) then fDeleteLine;
Dec(Ansiparm[1]);
End;
End;
's': Begin
fGetWhereX(SaveX);
fGetWhereY(SaveY);
AvState := 0;
End;
'u': Begin
fSetXY(SaveX, SaveY);
AvState := 0;
End;
'm': Begin
AvState := 0;
If AnsiParmNo > 0 Then
For i := 1 to AnsiParmNo Do
ColorParm(AnsiParm[i]);
fTextAttr := AvAttr;
if Assigned(fOnColorChange) then
fOnColorChange(fTextAttr);
End
Else
AvState := 0;
End;
End;
Procedure TDXAnsiHandler.Accum(ch: Char);
Begin
AnsiParm[AnsiParmNo] := (AnsiParm[AnsiParmNo] * 10) + (Ord(ch) - 48);
End;
Procedure TDXAnsiHandler.ShowEmulatorChar(ch:Char);
Var
i: Word;
A,B:Byte;
Begin
Case AvState of
0: Begin
Case ch of
#027: AvState := 1;
#012: AvReset; {^L - Avatar}
#025: AvState := 5; {^Y - Avatar}
#022: AvState := 7; {^V - Avatar}
Else
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, ch);
If Assigned(fOnWrite) then fOnWrite(Ch);
End;
End;
1: Begin
Case ch of
#27: Begin
AvState := 1;
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, #27);
If Assigned(fOnWrite) then fOnWrite(#27);
End;
'[': Begin
AvState := 2;
AnsiParmNo := 1;
FillChar2(AnsiParm,10,#0);
End;
#12: Begin
AvReset;
AvState := 0;
End;
#25: Begin
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, #27);
If Assigned(fOnWrite) then fOnWrite(#27);
AvState := 5;
End;
#22: Begin
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, #27);
If Assigned(fOnWrite) then fOnWrite(#27);
AvState := 6;
End
Else
Begin
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, #27);
If Assigned(fOnWrite) then fOnWrite(#27);
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, ch);
If Assigned(fOnWrite) then fOnWrite(Ch);
End;
End;
End;
2: Begin
Case ch of
#27: Begin
AvState := 1;
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, #27);
If Assigned(fOnWrite) then fOnWrite(#27);
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, '[');
If Assigned(fOnWrite) then fOnWrite('[');
End;
'0' .. '9': Accum(ch);
Else
If ch in ControlCh Then
ProcCtl(ch)
Else
AvState :=0;
End;
End;
5: Begin
AnsiParm[1] := Ord(ch);
AvState := 6;
End;
6: Begin
AvState := 0;
i := 1;
While i <= Ord(ch) Do
Begin
If InsertMode Then ;
// InsCharInLine(WhereX, WhereY, Chr(AnsiParm[1]));
If Assigned(fOnWrite) then fOnWrite(Chr(AnsiParm[1]));
Inc(i);
End;
End;
7: Begin
Case ch of
#001: AvState := 8; {^V^A}
#002: Begin
AvAttr := AvAttr or 128; {^B}
InsertMode := False;
AvState := 0;
End;
#003: Begin
fGetWhereY(B);
fGetWhereX(A);
If B>1 Then {^C}
fSetXY(A,B - 1);
InsertMode := False;
AvState := 0;
End;
#004: Begin
fGetWhereY(B);
fGetWhereX(A);
fSetXY(A,B+1); {^D}
InsertMode := False;
AvState := 0;
End;
#005: Begin
fGetWhereY(B);
fGetWhereX(A);
fSetXY(A+1,B); {^E}
InsertMode := False;
AvState := 0;
End;
#006: Begin
fGetWhereY(B);
fGetWhereX(A);
If A>1 Then {^F}
fSetXY(A-1,B);
InsertMode := False;
AvState := 0;
End;
#007: Begin
if Assigned(fClearToEOL) then fClearToEOL;{^G}
InsertMode := False;
AvState := 0;
End;
#008: AvState := 9; {^H}
#009: Begin
InsertMode := True; {^I}
AvState := 0;
End;
#010: Begin {^J}
AvState := 11;
RemainingParms := 5;
CommandType := 1;
InsertMode := False;
AnsiParmNo := 1;
End;
#011: Begin {^K}
AvState := 11;
RemainingParms := 5;
CommandType := 2;
InsertMode := False;
AnsiParmNo := 1;
End;
#012: Begin {^L}
AvState := 11;
RemainingParms := 3;
CommandType := 3;
InsertMode := False;
AnsiParmNo := 1;
End;
#013: Begin {^M}
AvState := 11;
RemainingParms := 4;
CommandType := 4;
InsertMode := False;
AnsiParmNo := 1;
End;
#014: Begin
// DelCharInLine(WhereX, WhereY);{^N}
InsertMode := False;
AvState := 0;
End;
#025: Begin {^Y}
AvState := 11;
RemainingParms := 1;
CommandType := 5;
AnsiParmNo := 1;
End;
End;
End;
8: Begin {^V^A}
AvAttr := Ord(ch);
fTextAttr := AvAttr;
if Assigned(fOnColorChange) then
fOnColorChange(fTextAttr);
AvState := 0;
InsertMode := False;
End;
9: Begin {^V^H}
AvState := 10;
AnsiParm[1] := Ord(ch);
End;
10:Begin {^V^H#}
AvState := 0;
fSetXY(Ord(ch), AnsiParm[1]);
InsertMode := False;
End;
11:Begin
AnsiParm[AnsiParmNo] := Ord(ch);
Inc(AnsiParmNo);
If AnsiParmNo > DXAnsiHandlerMaxParms Then
AnsiParmNo := DXAnsiHandlerMaxParms;
Dec(RemainingParms);
If RemainingParms < 1 Then
Begin
Case CommandType of
1: Begin {^V^J}
// ScrollScrnRegionUp(AnsiParm[3], AnsiParm[2], AnsiParm[5],
// AnsiParm[4], AnsiParm[1]);
AvState := 0;
End;
2: Begin {^V^K}
// ScrollScrnRegionDown(AnsiParm[3], AnsiParm[2], AnsiParm[5],
// AnsiParm[4], AnsiParm[1]);
AvState := 0;
End;
3: Begin {^V^L}
fTextAttr := AnsiParm[1];
if Assigned(fOnColorChange) then
fOnColorChange(fTextAttr);
// InitializeScrnRegion(WhereX, WhereY, WhereX + AnsiParm[3],
// WhereY + AnsiParm[2], ' ');
AvState := 0;
End;
4: Begin {^V^M}
fTextAttr := AnsiParm[1];
if Assigned(fOnColorChange) then
fOnColorChange(fTextAttr);
// InitializeScrnRegion(WhereX, WhereY, WhereX + AnsiParm[4],
// WhereY + AnsiParm[3], Chr(AnsiParm[2]));
AvState := 0;
End;
5: Begin {Have num chars swith to 6}
RemainingParms := Ord(Ch) + 2;
CommandType := 6;
End;
6: Begin {^V^Y}
RepCount := AnsiParm[AnsiParmNo - 1];
While RepCount > 0 Do
Begin
AnsiParmNo := 2;
While AnsiParmNo < (AnsiParm[1]+ 3) Do
Begin
If Assigned(fOnWrite) then fOnWrite(Chr(AnsiParm[AnsiParmNo]));
Inc(AnsiParmNo);
End;
Dec(RepCount);
End;
AvState := 0;
End;
End;
End;
End;
End;
End;
Procedure TDXAnsiHandler.ShowEmulatorStr(S:String);
Var
Loop:Integer;
Begin
For Loop:=1 to Length(S) do ShowEmulatorChar(S[Loop]);
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -