Вниз
Скачать: CL | DM;

Консольное приложение. Очистить Экран.   Найти похожие ветки 

← →
jonni ©   (2005-01-06 22:15) [0]

Есть ли функции для очистки экрана консоли??? В MSDN не нашёл ничего кроме как ScrollConsoleScreenBuffer с помощью которой можно затирать.

Может кто знает. Есть ли что-нибудь ещё для этих целей?


← →
GuAV ©   (2005-01-06 22:47) [1]

в 98 вроде работает...

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils, Windows;

procedure ExecuteDOSCommand(cmd: string);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
begin
  FillChar(SI, SizeOf(SI),0);
  SI.cb:=SizeOf(SI);
  if not CreateProcess(nil,
    PChar(SysUtils.GetEnvironmentVariable("COMSPEC") + " /C" + cmd),
    nil, nil, False, 0, nil, nil, SI, PI) then
    RaiseLastOSError;
  WaitForSingleObject(PI.hProcess, INFINITE);
  CloseHandle(PI.hThread);
  CloseHandle(PI.hProcess);
end;

begin
 WriteLn("Now you see it");
 ReadLn;
 ExecuteDOSCommand("CLS");
 WriteLn("Now you don""t...");
 ReadLn;
end.


← →
jack128 ©   (2005-01-06 22:57) [2]

GuAV ©   (06.01.05 22:47) [1]
GetEnvironmentVariable("COMSPEC") + " /C" + cmd

а что такое cmd ?? "cmd" ??


← →
jack128 ©   (2005-01-06 23:01) [3]

вобщем в Win2K не работает..


← →
jack128 ©   (2005-01-06 23:02) [4]

блин, сорри - туплю -)


← →
GuAV ©   (2005-01-06 23:13) [5]

jack128 ©   (06.01.05 23:01) [3]
jack128 ©   (06.01.05 23:02) [4]

Так работает или нет ?

Кстати, если работает, наверное лучше действительно прописать "CLS" заместо cmd, т.к. другие дос - комманды вряд ли будут нужны.


← →
Cobalt ©   (2005-01-06 23:47) [6]

Грустно :(
Вот так программисты и приходят к тому, что бы использовать сторонние программы с парсером получаемого текста, вместо того, что бы использовать библиотеки...


← →
GuAV ©   (2005-01-07 00:12) [7]

Cobalt ©   (06.01.05 23:47) [6]

не понял.


← →
vertal ©   (2005-01-07 01:01) [8]

Я не совсем понимаю, зачем для этого вызывать внешние программы, как предложено в [1]. Вот на мой взгляд более подходящий код:

{$APPTYPE CONSOLE}

uses windows;

function ClearScreenBuffer(): Boolean;
var
 Screen: PCharInfo;
 upperleftcorner: _coord;
 RegionToWrite: TSmallRect;
 csbi: _Console_Screen_Buffer_Info;
begin
 Result := False;
 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), csbi);
 Screen := PCharInfo(GlobalAlloc(GPTR, sizeof(TCHarInfo) * csbi.dwSize.X * csbi.dwSize.Y));
 if Screen = nil then Exit;
 upperleftcorner.X := 0;
 upperleftcorner.Y := 0;
 RegionToWrite.Left := 0;
 RegionToWrite.Top := 0;
 RegionToWrite.Right := csbi.dwSize.X - 1;
 RegionToWrite.Bottom := csbi.dwSize.Y - 1;
 Result := WriteConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE), screen, csbi.dwSize,
   upperleftcorner, RegionToWrite);
 GlobalFree(Cardinal(Screen));
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),upperleftcorner);
end;

begin
 ClearScreenBuffer();
end.

Проверял в Win2000. Единственное - более правильно конечно заполнять не символом Char(0), а пробелами, но на моей системе и такеи символы отображаются как пробелы, так что не стал ставить цикл.


← →
jack128 ©   (2005-01-07 01:43) [9]

GuAV ©   (06.01.05 23:13) [5]
Так работает или нет ?

Да, работает, просто я ступил.
Cobalt ©   (06.01.05 23:47) [6]
vertal ©   (07.01.05 1:01) [8]
Ну я думаю тут дело в том, что кол-во знакомых с командами дос больше, чем кол-во знающих апи для работы с консолью ;-)


← →
DelphiN! ©   (2005-01-07 11:15) [10]

А не легче WriteLn прогнать много раз ?


← →
ламер ©   (2005-01-07 15:14) [11]

FillConsoleOutputCharacter() + FillConsoleOutputAttribute().



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.032 c
3-1106577778
DimonNew
2005-01-24 17:42
2005.02.20
Сохранение файлов в BLOB поле


6-1102537369
Homa_Programer
2004-12-08 23:22
2005.02.20
выключение компа


4-1104936523
qwe
2005-01-05 17:48
2005.02.20
Инсталяция


11-1091002852
M5
2004-07-28 12:20
2005.02.20
Как в МСК/КОЛ узнать, что нажата нужная клавиша и отреагировать?


6-1101984002
yaJohn
2004-12-02 13:40
2005.02.20
Подавить сообщение об ошибках JS скрипта в ТWebBrowser




   Наверх