IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Проблема с графикой в tmt pascal, SVGA В TMT
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


Здравствуйте. У меня проблема:в графическом режиме происходит откровенно говоря чёрти что. При загрузке svga256.bgi нормально рисуется круг, при попытке вывести bmp(модуль взят с этого сайта) на дисплее какие то цветные точки, при установке графического режима функцией setsvgamode и попытке изобразить круг: сначала круг, затем точки. Для уточнения: у меня монитор wxga, карта nvidia geforce. Пожалуйста, укажите поблему и способ её устранения. Заранее благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
с графикой в tmt pascal


Цитата
При загрузке svga256.bgi

blink.gif

Зачем для ТМТ загружать драйвер svga256.bgi? blink.gif

SetSVGAMode(...); и ставишь нужный режим.

Вывод BMP для TMT

Программу приложи свою.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Арсений @ 29.12.2007 2:30) *
Пожалуйста, укажите поблему и способ её устранения. Заранее благодарен.
Помочь тебе в решении проблемы - можем. А вот указать проблему тебе придется самостоятельно.
Опиши словами, что хочешь получить, что для этого делаешь, что получается, и чем то, что получается, отличается от того, что хочешь получить. Если не работает, как хочется, какой-то фрагмент кода - приведи его.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


За ссылку спасибо. При использовании прцедуры SetSVGAMode(...) появляются либо точки(я в предидущем сообщении об этом писал(пожалуйста, прочитайте повнимательнее)) или 'returne соde:0'. Для уточнения: вот программа вызывающая 2-ой глюк(см файл).


Прикрепленные файлы
Прикрепленный файл  noname00.pas ( 280 байт ) Кол-во скачиваний: 298
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Ты пишешь о том, что при загрузке svga256.bgi у тебя рисуется круг. То, что круг рисуется, вроде бы, говорит о том, что режим инициализируется и работает. Но ТМТ с bgi-драйверами рабртать не может. Никак.
Так что дело не в том, что я что-то невнимательно читаю, а в том, что ты либо очень невнимательно экспериментируешь, либо очень невнимательно описываешь результаты своих экспериментов.
Другими словами, первое сообщение не заслуживает доверия. Поэтому я и просил более толково описать симптомы.

Далее, если ты используешь модуль, не входящий в комплект поставки, и у тебя при этом возникают ошибки, то веоятнее всего, ошибки следует искать именно в этом модуле, а не в компиляторе.

Опять же, так и осталось невыясненным, что за файл такой test.bmp. Не зная его свойств (по крайней мере, размеров и глуби ны цвета) ситуацию нельзя смоделировать.

Вообще-то графика в ТМТ работает через VESA, а я что-то не припоминаю, чтобы там были моды типа 1280х800.

У меня вот эта программа (откомпилированная под DOS):

program test;
uses graph;
var
w,h:word;
x,y:smallint;
begin
setsvgamode(1280,800,8,0);
for x := 0 to 799 do
putpixel(x,x,15);
end.
Выдает сообщение :
PMODE/W DOS Extender v1.33
Copyright © 1994-1997, Charles Scheffold and Thomas Pytel

Return code: 0
Execution time: 0.96 seconds
Press any key...

а вот эта:
program test;
uses graph;
var
w,h:word;
x,y:smallint;
begin
setsvgamode(1280,1024,8,0);
for x := 0 to 799 do
putpixel(x,x,15);
end.

рисует косую линию и несколько групп точек.

В первом варианте, очевидно, не поддерживается запрошенная видеомода, а во втором - все работает правильно за исключением того, что из программы не предусмотрен корректный выход. (группы точек - это неудачная попытка VideoBIOS вывести на экран текст с сообщением об окончании работы)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Andriano, по поводу драйвров ты не прав. А именно я вместо функции setsvgamode поставил загрузку драйвера. Всё пошло: задержав программу с помощью readln наконец то вывел bmp изображение. Остается один вопрос как подобрать разрешение в setsvgamode чтобы она нормально пахала? P.S. Добавляю файлы о которых шла речь.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


Извините, это я гостем вошел. ohmy.gif Файлы в наличии.


Прикрепленные файлы
Прикрепленный файл  проблемы.rar ( 9.58 килобайт ) Кол-во скачиваний: 188
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Гость @ 29.12.2007 19:12) *
Andriano, по поводу драйвров ты не прав.
smile.gif
Цитата
А именно я вместо функции setsvgamode поставил загрузку драйвера. Всё пошло: задержав программу с помощью readln наконец то вывел bmp изображение.
А теперь убери куда нибудь эти "драйвера" так, чтобы к ним даже пути провешены не были, и запусти программу снова.
Что теперь?
И как это можно объяснить?
Цитата
Остается один вопрос как подобрать разрешение в setsvgamode чтобы она нормально пахала? P.S. Добавляю файлы о которых шла речь.
Очевидно, только одним путем: эти видеомоды должен поддерживать VideoBIOS.
Попытайся воспользоваться следующей процедурой, а также теми, на которые еще ссылается справка:
Цитата
Sets the system to graphics mode and clears the screen.

Declaration:
procedure SetGraphMode(Mode: Word);

Remarks:
Mode must be a valid mode for the current video adapter. This procedure supports all VESA VBE graphic modes (100h - FFFh), which are supported by video adapter.

Example:
SetGraphMode($101) // set SVGA 256-colored mode 640x480;
SetGraphMode($114) // set SVGA 64K-colored mode 800x600;

SetGraphMode($12A) // set SVGA 16M+A-colored mode 1024x768;

Keep in mind what your video card may not support all these modes. See GetVbeModesList and TotalVbeModes.

Например, так:
uses graph;
var
i : integer;
ModesList : ^array[0..0] of GraphModeType;
begin
writeln('TotalVbeModes:',TotalVbeModes);
getmem(ModesList,TotalVbeModes*sizeof(GraphModeType));
GetVbeModesList(ModesList^);
for i := 0 to TotalVbeModes-1 do
with ModesList^[i] do
writeln(i:2,' Mode:', VideoMode:3,' BPP:',BitsPerPixel:2,' Size: ', XResolution,' x ', YResolution);
freemem(ModesList,TotalVbeModes*sizeof(GraphModeType));
end.


Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


Почти ясно. Только изображение выводится лишь при режиме $101. Суди по переводу GetVbeModesList и TotalVbeModes выдают максимально возиожный режим, но при результете который они выдают, изображение не выводится. Подскажите, как определить режим с максимальным качеством. И еще проблема: когда прога сворачивается в окно, изображение пропадает, а сама прога зависает. Подскажите, пожалуйста, как решить даные проблемы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Арсений @ 29.12.2007 21:17) *

Почти ясно. Только изображение выводится лишь при режиме $101. Суди по переводу GetVbeModesList и TotalVbeModes выдают максимально возиожный режим, но при результете который они выдают, изображение не выводится.
Это не совсем так.
Теоретически весь список является доступным. Другое дело, что WinXP не позволяет делать DOS-программам все, что им захочется. Я вот сейчас поэкспериментировал и вогнал Windows в "синий экран".
Цитата
Подскажите, как определить режим с максимальным качеством.
Если ты будешь работать под "голым DOS", то можешь достаточно смело пользоваться любым из видеорежимов. WinXP, очевидно, их ограничивает. Опять же, если тебе удалось заставить что-то работать на одном компьютере, то совершенно неочевидно, что то же самое удастся сделать на компьютере с другой видеокартой.
Цитата
И еще проблема: когда прога сворачивается в окно, изображение пропадает, а сама прога зависает. Подскажите, пожалуйста, как решить даные проблемы.
Последнее - только запуская программу в "голом DOS". DOS программа может работать ТОЛЬКО в полноэкранном режиме. Ничего другого никем не гарантируется. WinXP обладает лишь частичной поддержкой DOS-программ, использующих графику.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


А есть какие нибудь эмуляторы для DOSовских программ в XP? Может ли программа видеть если её лишают полного экрана?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Что значит "лишают"?
В DOS это принципиально невозможно.
А под особенности Windows DOS никогда не подстраивался.
Windows же, как я уже говорил, поддерживает DOS лишь частично. А 64-разрядные версии Windows не поддерживают DOS вообще. Даже DOS32.
Есть, правда, такая программа как DOSbox, которая может обеспечить работу в Windows тех программ, которые сама Windows не поддерживает. Значит - можно. Но в Microsoft не хотят.
И работает ли она в Win64, я не знаю.
Но возникает вопрос: если хочешь, чтобы программа работала в Windows, зачем писать ее под DOS?

Еще раз рекомендую поделиться, ради чего это все затевается. А то пока разговор получается очень абстрактным.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


"лишают"- имеется в виду сбой когда программа сворачивается в окно(нажато Alt+Enter, Windows). Проблема в том, что программа зависает и не может вывести изображение, отреагировать на Enter. P.S под DOS программа пишется потому, что под windows free только fpc, а он глючныйи и ему нужны дрова.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Арсений @ 30.12.2007 17:44) *

"лишают"- имеется в виду сбой когда программа сворачивается в окно(нажато Alt+Enter, Windows). Проблема в том, что программа зависает и не может вывести изображение, отреагировать на Enter.
С точки зрения Микрософт (т.е. разработчика как DOS, так и Windows) так и должно быть.
Т.е. это не баг, а фича.
Цитата
P.S под DOS программа пишется потому, что под windows free только fpc, а он глючныйи и ему нужны дрова.
Неправда. Свободный еще, минимум, TurboDelphi. Если нужно писать программу, работающую в Windows, думаю, наилучший вариант.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


Кроче говоря, если программа вернулась в полный экран, то как восстановить изображение? P.S. Turbo delphi не free, turbo pascal for windows- он free, но требует дров, модулей(для мыши).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Арсений @ 30.12.2007 20:33) *

Кроче говоря, если программа вернулась в полный экран, то как восстановить изображение?
Не понял вопроса. ТОЛЬКО полноэкраный режим и является единственным нормальным режимом работы DOS-приложения.
Цитата
P.S. Turbo delphi не free, turbo pascal for windows- он free, но требует дров, модулей(для мыши).
Тебе недостаточно, что Turbo Delphi бесплатна и при этом допускает коммерческое использование?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


Цитата
Не понял вопроса. ТОЛЬКО полноэкраный режим и является единственным нормальным режимом работы DOS-приложения.

Ситуация: юзер нажал клаву Windows, программа свернулась на панель задачь, юзер снова щелкает по программе на панели задач, соответственно программа разворачивается. Так ЧТО должна сделать программа, чтобы вернуть изображение, которое было до нажатия?
О Turbo Delphi наконец всё узнал. Да она бесплатная. Хороший вариант, токо надо разобираться с дравами и юнитами.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Арсений @ 31.12.2007 3:01) *
Так ЧТО должна сделать программа, чтобы вернуть изображение, которое было до нажатия?
Программа ДОЛЖНА использовать тот видеорежим, который поддерживается Windows для DOS-программ. Текстовый - поддерживается точно. Графика 320х200 - вроде бы тоже. Большее не проверял.

Собственно, вопрос изначально некорректно сформулирован. Сама программа не может сделать НИЧЕГО. Вопрос лишь в том, какой из видеорежимов Windows умеет восстанавливать, а какой - нет.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Арсений

Репутация: -  0  +


Всё. Большое всем спасибо за помощь. Я разобрался.
closegraph;
SetGraphMode($101);
Этот код восстанавливает графический режим.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Этот код не восстанавливает режим, а устанавливает заново.
Разница примерно как между ремонтом и покупкой нового.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.01.2021 8:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name