Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цвет фона консоли 
V
    Опции темы
mgkit
Дата 14.2.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Привет всем. Как изменить цвет фона в консольном режиме? Не цвет фона текста (SetConsoleTextAttribute(Console, 1+White*16)), а сам цвет консоли. По умолчанию он чёрный.
PM MAIL   Вверх
bems
Дата 14.2.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



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

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


--------------------
Обижено школьников: 8
PM MAIL   Вверх
mgkit
Дата 14.2.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Да не одно и тоже.. Изменяется только фон букв, а мне нужен что бы весь задний фон изменился.. Ну например в командной строке (cmd) можно задать Color xy (где x-цвет фона, y-цвет текста) и изменится фон везде, а не только по написанным участкам. Так и в консоле хочется, что бы не цвет фона букв изменялся, а весь цвет фона..
PM MAIL   Вверх
bems
Дата 14.2.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



просто поменяй атрибут везде


--------------------
Обижено школьников: 8
PM MAIL   Вверх
mgkit
Дата 14.2.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



smile  и пробелы ставить до конца строки тоже?) Мне нужен полностью залитый фон.. А не только там где я писал)
PM MAIL   Вверх
Amphiluke
Дата 14.2.2010, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 6
Всего: 112



Можно попросту запускать свою собственную программу посредством 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 можно временно отключить.
PM   Вверх
mgkit
Дата 14.2.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Amphiluke Спасибо, но этот метод слишком сильный для моего уровня. Не люблю делать то, чего не понимаю) Ну если другого способа нет - обойдусь и чёрным экраном)
PM MAIL   Вверх
Amphiluke
Дата 14.2.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 6
Всего: 112



Да этот метод просто выполняет командную строку

Код

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


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

Хотя, конечно, этот метод — не лучшее решение.
PM   Вверх
bems
Дата 14.2.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



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




--------------------
Обижено школьников: 8
PM MAIL   Вверх
mgkit
Дата 16.2.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Amphiluke
Спасибо за код. Помогло) Поставил бы плюс, но сообщений мало)) Большое сасибо!! Удачи!
PM MAIL   Вверх
Gwire
Дата 26.3.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4




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;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1281 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.