如题
winexec(pansichar('cls'),0);
失败,无效果
cls;
clrscr;
无此函数....
囧了顺便问下怎么改字或者背景的颜色...

解决方案 »

  1.   

    //清屏
    procedure cls;
    var
      hStdOut:THandle;
      colScreen : COORD ;
      bSucc:LongBool;
      csbi : TConsoleScreenBufferInfo;
      dwConSize, dwChrWritten : DWORD;
    begin
      //获取输出窗口句柄
      hStdOut := GetStdHandle( STD_OUTPUT_HANDLE );  //获取输出窗口缓冲状态信息
      bSucc := GetConsoleScreenBufferInfo( hStdOut, csbi);
      if not bSucc then exit;  //计算缓冲字符总大小
      dwConSize := csbi.dwSize.X * csbi.dwSize.Y;  colScreen.X := 0;
      colScreen.Y := 0;  //用空格填充全屏
      bSucc := FillConsoleOutputCharacter(hStdOut,
                                        ' ',
                                        dwConSize,
                                        colScreen,
                                        dwChrWritten);
      if not bSucc then exit;  //获取输出窗口缓冲状态信息
      bSucc := GetConsoleScreenBufferInfo(hStdOut, csbi);  if not bSucc then exit;  //设置缓冲区的相应属性
      bSucc := FillConsoleOutputAttribute(hStdOut,
                                        csbi.wAttributes,
                                        dwConSize,
                                        colScreen,
                                        dwChrWritten );
      if not bSucc then exit;  //设置光标位置
      SetConsoleCursorPosition(hStdOut, colScreen);
    end;//设置控制台颜色
    procedure consolecolor(wColorAttrib:Word);
    var
      hStdOut:THandle;
    begin
      hStdOut := GetStdHandle( STD_OUTPUT_HANDLE );
      SetConsoleTextAttribute(hStdOut, wColorAttrib);
    end;//使用
    //先设置控制台字符和背景颜色,RGB颜色原理就不用我说了吧
    consolecolor(FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE or BACKGROUND_BLUE);
    再清屏
    cls;//好了,现在整屏都是蓝色背景+白色文字前景
      

  2.   

    program Project1;{$APPTYPE CONSOLE}uses
      Windows,SysUtils;  var
      i:Integer;
      nConsoleHandle : Integer;
      lwWritten : Longword;
      Coord : TCoord;
    begin
      try
        Coord.X := 0;
        Coord.Y := 0;
        nConsoleHandle := GetStdHandle(STD_OUTPUT_HANDLE);
        for I := 1 to 12  do Writeln(IntToStr(i));   //输出一些东西
        Sleep(1000);
        FillConsoleOutputCharacter(nConsoleHandle, #32, 80*24, Coord, lwWritten); //清空
        Readln;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    end.FillConsoleOutputCharacter 这个函数可能楼主需要。
      

  3.   

    program Project2;{$APPTYPE CONSOLE}uses
      Windows,SysUtils;  var
      i:Integer;
      nConsoleHandle : Integer;
      lwWritten : Longword;
      Coord : TCoord;
    begin
      try
        Coord.X := 0;
        Coord.Y := 0;
        nConsoleHandle := GetStdHandle(STD_OUTPUT_HANDLE);
        for I := 1 to 12  do Writeln(IntToStr(i));   //输出,用于测试
        Sleep(1000);
        FillConsoleOutputCharacter(nConsoleHandle, #32, 80*24, Coord, lwWritten); //清空
        SetConsoleCursorPosition(nConsoleHandle, Coord); //将光标设置在第一行
        Readln;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    end.Delphi,WidowsXP下调试通过.
      

  4.   

    dos的conio库,vc的cursr库(不知道有没有拼错),都是能定位屏幕位置的,才有清屏的说法真正的控制台,都只是一行行输出的结果,应该没法清了cmd.exe的清屏,只是这个程序自己对显示内容做的一种处理吧