Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Цвет фона консоли


Автор: mgkit 14.2.2010, 15:08
Привет всем. Как изменить цвет фона в консольном режиме? Не цвет фона текста (SetConsoleTextAttribute(Console, 1+White*16)), а сам цвет консоли. По умолчанию он чёрный.

Автор: bems 14.2.2010, 17:56
Цитата(mgkit @  14.2.2010,  15:08 Найти цитируемый пост)
Как изменить цвет фона в консольном режиме? Не цвет фона текста
это одно и то же

Добавлено через 4 минуты
Если нужно изменить текущие, не выводя нового текста, то WriteConsoleOutputAttribute

Автор: mgkit 14.2.2010, 18:36
Да не одно и тоже.. Изменяется только фон букв, а мне нужен что бы весь задний фон изменился.. Ну например в командной строке (cmd) можно задать Color xy (где x-цвет фона, y-цвет текста) и изменится фон везде, а не только по написанным участкам. Так и в консоле хочется, что бы не цвет фона букв изменялся, а весь цвет фона..

Автор: bems 14.2.2010, 18:41
просто поменяй атрибут везде

Автор: mgkit 14.2.2010, 18:44
smile  и пробелы ставить до конца строки тоже?) Мне нужен полностью залитый фон.. А не только там где я писал)

Автор: Amphiluke 14.2.2010, 20:22
Можно попросту запускать свою собственную программу посредством cmd.exe. smile
Код

program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

  procedure RestartWithCmd;
  var
    _si: STARTUPINFO;
    _pi: PROCESS_INFORMATION;
    SysDir: array[0..MAX_PATH - 1] of Char;
    CmdPath: string;
  begin
    GetSystemDirectory(SysDir, MAX_PATH);
    CmdPath := string(SysDir) + '\cmd.exe';
    ZeroMemory(@_si, SizeOf(_si));
    _si.cb := SizeOf(STARTUPINFO);
    if CreateProcess(PChar(CmdPath),
         PChar(CmdPath + ' /C "color fc&&"' + ParamStr(0) + '" -cmd"'), nil,
         nil, False, CREATE_DEFAULT_ERROR_MODE, nil, nil, _si, _pi) then
    begin
      CloseHandle(_pi.hProcess);
      CloseHandle(_pi.hThread);
    end
    else
      MessageBox(0, PChar(SysErrorMessage(GetLastError())), nil, MB_OK);
  end;

begin
  { если программа запущена непосредственно, то перезапустить через cmd.exe }
  if ParamCount() < 1 then
  begin
    RestartWithCmd();
    Exit;
  end;

  { отсюда стартует основной код программы }
  Writeln('Lorem ipsum dolor sit amet');
  Readln;
end.


На время отладки перезапуск через cmd.exe можно временно отключить.

Автор: mgkit 14.2.2010, 20:42
Amphiluke Спасибо, но этот метод слишком сильный для моего уровня. Не люблю делать то, чего не понимаю) Ну если другого способа нет - обойдусь и чёрным экраном)

Автор: Amphiluke 14.2.2010, 20:49
Да этот метод просто выполняет командную строку

Код

cmd.exe /C "color fc&&"Путь к вашей программе" -cmd"


ключ /C заставляет командный интерпретатор выполнять строку, следующую за ключом, как набор команд. Там и написано поменять цвет и запустить вашу программу...

Хотя, конечно, этот метод — не лучшее решение.

Автор: bems 14.2.2010, 22:16
mgkit, ну сказал же
Цитата(bems @  14.2.2010,  17:56 Найти цитируемый пост)
Если нужно изменить текущие, не выводя нового текста, то WriteConsoleOutputAttribute 


Автор: mgkit 16.2.2010, 22:18
Amphiluke
Спасибо за код. Помогло) Поставил бы плюс, но сообщений мало)) Большое сасибо!! Удачи!

Автор: Gwire 26.3.2010, 18:18

mgkit, тебе нужно потенять атрибуты у каждой ячейки консоли

Разкоментируй то что нужно.
Код

FOutHandle:= GetStdHandle(STD_OUTPUT_HANDLE);

procedure //Назови как хочешь;
var Count, Res: Cardinal;
    BuffInfo: TConsoleScreenBufferInfo;
begin
    GetConsoleScreenBufferInfo( FOutHandle, BuffInfo );
    with BuffInfo do Count:= dwSize.X * dwSize.Y;

    BuffInfo.dwCursorPosition.X:= 0;
    BuffInfo.dwCursorPosition.Y:= 0;

    // Изменить атривуты для всех (Желтых на Синем)
    //FillConsoleOutputAttribute( FOutHandle, 16+14, Count, BuffInfo.dwCursorPosition, Res );
    
    // Очистить экран
    //FillConsoleOutputCharacter( FOutHandle, #0, Count, BuffInfo.dwCursorPosition, Res);  
    //SetConsoleCursorPosition( FOutHandle, BuffInfo.dwCursorPosition );
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)