Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
14-1107098249
banderas
2005-01-30 18:17
2005.02.20
DVD+-RW


6-1102584348
Memphis
2004-12-09 12:25
2005.02.20
Настройка IP в винде


3-1106330824
ALEI_i_IKA
2005-01-21 21:07
2005.02.20
Создаю таблицу с помощью SQL запроса...


4-1105249313
ArchValentin
2005-01-09 08:41
2005.02.20
Непонятки с ShellExecute...


1-1107781490
r.o.o.t
2005-02-07 16:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский