Текущий архив: 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.47 MB
Время: 0.042 c