Главная страница
    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.47 MB
Время: 0.042 c
1-1107720491
Layner
2005-02-06 23:08
2005.02.20
Здравствуйте! Посоветуйте плз, как так можно сделать,


3-1106292623
MAVOR
2005-01-21 10:30
2005.02.20
Подсчёт кол-во записей


14-1107054763
Бугага
2005-01-30 06:12
2005.02.20
Enterprise Resource Planning


9-1100334142
mozartw
2004-11-13 11:22
2005.02.20
Как сотрудничают 3dmax и compiler


14-1106763171
BZsder
2005-01-26 21:12
2005.02.20
Создание окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский