Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.10.2009, 21:35
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
Вопрос Мерцание в консоли

Помогите, чем можете!
У меня есть 2 массива
Код:
var
    XOut : array [0..23] of string;
    XClr  : array [0..23,0..78] of integer;
Проблема в том, что эти массивы надо вывести на экран (и переодически обновлять)(10 раз в секунду).
Код:
procedure XScreenOut;
var x,y : integer
begin
    ClrScr;
    for y := 0 to 23 do
        for x := 0 to 78 do begin
            if XClr[y,x] = 1 then begin
                TextColor(Back);
                TextBackground(Fore);
            end;
            if x = 78 then writeln(XOut[y,x])
                        else write(XOut[y,x]);
            if XClr[y,x] = 1 then begin
                TextColor(Fore);
                TextBackground(Back);
            end;
end;
но дело в том, что вывод происходит с жутким мерцанием.
Никто незнает, как это побороть?
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #2  
Старый 28.10.2009, 22:08
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

1. Это-же вроде паскаль, а не дельфи.
2. Это-же вроде не консоль
3. ClrSrc - каждый раз вызывать плохо т.к. будет мерцать.
4. Добавьте в модули Crt. Будет существенно быстрее выводить на экран.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 28.10.2009, 23:24
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Цитата:
1. Это-же вроде паскаль, а не дельфи.
2. Это-же вроде не консоль
3. ClrSrc - каждый раз вызывать плохо т.к. будет мерцать.
4. Добавьте в модули Crt. Будет существенно быстрее выводить на экран.
1. а чем дельфи не паскаль? 2. это консоль. 3. полностью согласен 4. без Crt нельзя очищать экран и менять цвета, поэтому он уже есть.

чтобы не мерцало, надо переписывать только те части экрана, которые меняются. есть такая процедура - GoToXY(x, y) которая перемещает курсор на заданную позицию. вызывай ее перед выводом изменений. например
Код:
clrscr;
writeln('123');
writeln('456');
writeln('789');
gotoxy(2, 2);
write(' ');
вместо 5 должен появится пробел
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #4  
Старый 29.10.2009, 00:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
1. а чем дельфи не паскаль?
А вы сможете выполнить на дельфи этот код?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 29.10.2009, 00:48
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

разумеется, нет. но форум то не только о дельфи, но и простом паскале
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #6  
Старый 29.10.2009, 17:38
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Ну так это дельфи

А каким боком окромя ClrScr можно это сделать?
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #7  
Старый 29.10.2009, 20:28
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

т.е. надо массив из 23 строк вывести на экран, каждый элемент массива в отдельной строке. При этом надо, выводя на экран по символу, проверить, и если значение элемента массива Xclr с индексом y,x (координаты текущего символа) равно 1, то вывести этот символ с инвертированым текстом и фоном.
Код:
TextColor(цвет фона)
TextBackground(цвет текста)
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter