⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxansi.pas

📁 Well known and usefull component for delphi 7
💻 PAS
📖 第 1 页 / 共 2 页
字号:
         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 + -