Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: 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 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
1-1107468100
Назаров Евгений
2005-02-04 01:01
2005.02.20
чтение из Excel таблиц в фоновом режиме


6-1102415874
Prankster.
2004-12-07 13:37
2005.02.20
Получение файла из сети


3-1106543428
SarDoX
2005-01-24 08:10
2005.02.20
Сложный поиск


1-1107872625
Stype
2005-02-08 17:23
2005.02.20
Директория Windows


14-1107152749
Думкин
2005-01-31 09:25
2005.02.20
С днем рождения! 31 января