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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика на Паскале 
:(
    Опции темы
Irin
Дата 12.11.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



     Помогите пожалуйста! Ответьте на следующие вопросы:

     Можно ли загрузить в Паскале цвета, кроме стандартных(например, использая коды RGB) если да, то как? Можно ли сделать градиентную заливку, и вставить картинки формата JPG(или Gif)?
И можно ли работать одновременно и в графическом, и в текстовом режиме (Т.е. чтобы была красивая заставка с картинкой, пользователь нажимал на кнопки, и ему здесь же рисовался бы график)? 

Заранее благодарна, с уважением, Irin.
PM MAIL   Вверх
Alexeis
Дата 12.11.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Irin @  12.11.2006,  21:53 Найти цитируемый пост)
Можно ли загрузить в Паскале цвета, кроме стандартных(например, использая коды RGB) если да, то как? 

Можно, но при нормальном графическом драйвере  smile . 
Цитата(Irin @  12.11.2006,  21:53 Найти цитируемый пост)
Можно ли сделать градиентную заливку, и вставить картинки формата JPG(или Gif)?

Можно, если выполнить первое условие и найти необходимые декодеры для паскаля.

Цитата(Irin @  12.11.2006,  21:53 Найти цитируемый пост)
И можно ли работать одновременно и в графическом, и в текстовом режиме (Т.е. чтобы была красивая заставка с картинкой, пользователь нажимал на кнопки, и ему здесь же рисовался бы график)? 


А вот с этим уже никак. Либо то либо другое. 

Вся эта красота требует больших усилий. Это и многое другое проще всего делать под Windows на Delphi. Дос уже практически никем не поддерживается, а потому весьма неудобен как платформа для построения красивых и функциональных программ.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Irin
Дата 12.11.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо! Только где найти эти декодеры? И как их установить?
PM MAIL   Вверх
Irin
Дата 13.11.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, обидно...  

И еще вопрос про символьные массивы:
Если в задании сказано, что дан массив из литер, ограниченный точкой, то как его считывать? Если через цикл While, то как описывать тип массива? 

PM MAIL   Вверх
Alexeis
Дата 13.11.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Irin @  12.11.2006,  22:55 Найти цитируемый пост)
Только где найти эти декодеры? И как их установить?

А что уже удалось установить режим True Color под дос? Я встречал драйвера VESA, но при попытке установить что-то чуть более менее серьезное чем 640х480х4 выводит частоту моего монитора ниже всяких границ и он просто вырубается. А для JPEG глубина 24бита на пиксель обязательна иначе это будет не Jpeg а какой-то кошмар  smile . От стандартного видеоадаптера можно добиться 320х240х8, что достаточно для GIF, но при таком разрешении никаких графиков не нарисуешь. Тут каждый пиксель не пиксель а квадрат  smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
AlexST
Дата 13.11.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alexeis1 @  12.11.2006,  22:09 Найти цитируемый пост)
Цитата(Irin @  12.11.2006,  21:53 Найти цитируемый пост)
можно ли работать одновременно и в графическом, и в текстовом режиме (Т.е. чтобы была красивая заставка с картинкой, пользователь нажимал на кнопки, и ему здесь же рисовался бы график)?

А вот с этим уже никак. Либо то либо другое. 
Операторы текстового режима в графическом работают. Но это из сферы приколов. Хотя юзать можно. Ваще конечно текст выводится в графическом режиме спокойно и без приёмов текстового. 

Цитата(Irin @  13.11.2006,  00:51 Найти цитируемый пост)
ограниченный точкой
Поясни это.

Цитата(Irin @  13.11.2006,  00:51 Найти цитируемый пост)
как описывать тип массива
Ну символьный, наверно.  smile 


Это сообщение отредактировал(а) AlexST - 13.11.2006, 14:05
PM MAIL ICQ   Вверх
Irin
Дата 13.11.2006, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну задание такое: Дан текст из цифр, за которыми следует точка. Нужно напечатать его в обратном порядке и указать наиболее часто встречающююся цифру. Мне не совсем понятно, как задавать тип этого массива. Сначала я думала задать его как тип диапазон от символьного от "1" до "9", но так он почему-то работает неправильно. А если задавать просто символьный тип, то проверять после каждого введенного символа цифра он или нет, по-моему не рационально.
   И насчет точки. Если я правильно поняла, имеется в виду, что длина произвольная, и зависит от точки. Но как тогда задавать длину массива, если она заранее не определена? А если считать, что длина определена, то причем тут точка?



PM MAIL   Вверх
Alexeis
Дата 13.11.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(AlexST @  13.11.2006,  01:04 Найти цитируемый пост)
Операторы текстового режима в графическом работают. Но это из сферы приколов. Хотя юзать можно. Ваще конечно текст выводится в графическом режиме спокойно и без приёмов текстового. 


Они выполняются (Write, Writeln), но текст не выводят. Текст выводит уже другая графическая функция OutTextXY(); но это вывод текста в графическом режиме, а не совмещение графического и текстового.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
AlexST
Дата 13.11.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alexeis1 @  13.11.2006,  01:27 Найти цитируемый пост)
Они выполняются (Write, Writeln), но текст не выводят.
Пардон. Извиняюсь. Немного не точно выразился. ))))) Операторы ввода (Read, Readln) работают с эхом. Вывода конечно ничего не печатают.  smile Это удобно потому, что не надо реализовывать графический ввод, хотя немного коряво.

Цитата(alexeis1 @  13.11.2006,  01:27 Найти цитируемый пост)
это вывод текста в графическом режиме, а не совмещение графического и текстового.
Конечно.

Цитата(Irin @  13.11.2006,  01:19 Найти цитируемый пост)
Сначала я думала задать его как тип диапазон от символьного от "1" до "9", но так он почему-то работает неправильно. А если задавать просто символьный тип, то проверять после каждого введенного символа цифра он или нет, по-моему не рационально.
Влюбом случае надо проверять введённое число. То, что ты задашь значения массива через диапазон ничего тебе не даст. Рационально как раз второе.  smile 

Цитата(Irin @  13.11.2006,  01:19 Найти цитируемый пост)
Но как тогда задавать длину массива, если она заранее не определена? А если считать, что длина определена, то причем тут точка?
 Естесственно это должен быть динамический массив. Хотя здесь главное показать реализацию алгоритма, а не работу с памятью. Для лабы сойдёт тупо задать константную длину строки и работать с ней.

PM MAIL ICQ   Вверх
Irin
Дата 13.11.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



    Большое спасибо, вы мне очень помогли. 
И еще вопрос: где можно найти F_Mouse.TPU? В своих папках не нашла. 
PM MAIL   Вверх
Alexeis
Дата 13.11.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Irin, Это нестандартный модуль. Вообще стандартных модулей для мышки я не встречал, а вот нестандартных пруд пруди. Лично я пользовался модулем мышки из книги Фаронова часть 2. Но в инете полно любых других. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Nicholas_S
Дата 14.11.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Irin, могу помочь кое-чем, например, установкой режима от 640x480 до 1024x768 в 65535 цветах. Есть пример готовый с выводом фракталов. Насчет форматов аля JPG, к сожалению, не помогу, не приходилось писать собственноручно.


--------------------
...все в мире относительно
PM   Вверх
Alexeis
Дата 14.11.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Nicholas_S, Давай выкладывай, мне тоже интересно  smile .



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Nicholas_S
Дата 14.11.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



alexeis1, обязательно выложу, как доберусь  smile . Суть будет в использовании режима VESA. Возможно, будут некоторые проблемы при обратном переходе из этого режима в Windows (на некоторых видео-карточках), но, в принципе, решаемо.


--------------------
...все в мире относительно
PM   Вверх
Nicholas_S
Дата 14.11.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



См. аттачмент.
Файл "coregrph.pas", собственно, есть сам "движок". Позволяет установить 4 режима VESA: 320x240, 640x480, 800x600, 1024x768. Глубина цвета: 65535 цветов, т.е. 16 бит. В модуле есть доп. функции, половина самописные, половина нет. Некоторые, как то окраска пикселей и смешивание цветов, на asm'е. Остальные обычный код.
  Файл "main.pas" - маленький костяк.
  Есть рабочий пример, реализующий рисование фракталов (Жулиа, Мандельброт), "fractals.exe". Вирей нет, код не вредоносный, но страдающим паранойей лучше сразу удалить smile Исходники к exe'шнику не прикладываю, во всяком случае пока, потому как код достаточно большой и находится в нескольких модулях.

Забыл. Irin, есть также самописные модули, которые с пом. которых можно работать с текстом в графическом режиме, т.е. вывод своих знаков, чисел (также верхнего регистра, напр.). Код довольно простой, так что если потребуется - свисти. Может работать как с обычным graph.tpu, так и с vesa, т.е. функции вывода одни и те же.

Это сообщение отредактировал(а) Nicholas_S - 14.11.2006, 18:19

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  tp_graphmode.ZIP 25,06 Kb


--------------------
...все в мире относительно
PM   Вверх
Irin
Дата 14.11.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Nicholas_S, огромное спасибо за coregrph.pas.  Если тебе не сложно, выложи, пожалуйста эти самописные модули.   
PM MAIL   Вверх
Nicholas_S
Дата 14.11.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



См. аттачмент.
Файл модуля называется "kgnums.pas" (почему не помню  smile).
Файл "kgalf.pas" - набор "карт" символов с помощью простейшего массива. Размер символов довольно маленький (5x5 px), поэтому при желании можешь доработать.
По умолчанию подключается модуль graph.

Функции:
  1. procedure DrawTxt  (const X, Y : Integer; const Text : String; const Color : Integer; const Anim, Trans : Boolean);
    Рисует текст в заданных координатах заданного цвета.
        Anim - отрисовывать посимвольно с задержкой.
        Trans - прозрачный фон.

  2. function  TxtWidth (const Text : String) : Integer;
    Возвращает ширину строки.

  3. function  TxtHeight (const Text : String) : Integer;
    Возвращает высоту символа (в принципе, бесполезна, т.к. макс. размер заведомо известен, но все-же так "правильнее").

  4. procedure DrawFrameTxt (const X, Y : Integer; const Text : String; const FrameColor, FillColor, TextColor : Integer; const W, H : Integer)
    Рисует текст в заданных координатах заданного цвета, обрамляя рамкой заданного цвета заливки, границы и размеров.

Дерзай.

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  kgtext.ZIP 2,10 Kb


--------------------
...все в мире относительно
PM   Вверх
Irin
Дата 15.11.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Nicholas_S, Cпасибо. Только ты мог-бы в двух словах рассказать, как ты сделал меню на паскале, и как совместил его с графикой? (в программе про фракталы)
PM MAIL   Вверх
Nicholas_S
Дата 15.11.2006, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Irin, да, мог бы. Это еще один модуль. smile



--------------------
...все в мире относительно
PM   Вверх
Irin
Дата 15.11.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Nicholas_S, а можно как-нибудь проще более-менее нормальное меню сделать?
PM MAIL   Вверх
Nicholas_S
Дата 15.11.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я могу выложить и этот модуль, но  не думаю, что он подойдет, в том плане, что там достаточно много кода, потому как меню универсальное. Мне кажется тебе проще будет написать свою реализацию несложного меню.
  Например, у тебя сейчас есть модуль для вывода текста. Там есть процедура вывода обрамленного текста - используй ее для вывода пунктов меню.  Например (пишу на коленке сейчас, так что ошибки могут быть):

Код

  const menuCnt = 5;

  var selItem: Integer;     {выделенный пункт меню}
        menuItems: Array[1..menuCnt] of String;  {текст пунктов меню}
        key: Char;    {нажатая клавиша}

  procedure DrawMenuItem(itemInd: Byte; isSelected: Boolean);
  begin
    {здесь отрисовываешь элемент меню, использую вывод текста в рамке и учитывая выделен ли элемент, т.е. isSelected=true}
  end;


  procedure DrawMenu();
    var i: Integer;
  begin
    for i:= 1 to menuCnt do
        DrawMenuItem(i, (i=selItem));
    ...
  end;

  procedure ChangeIndex(incr: Byte);
  begin
    DrawMenuItem(itemInd, false);  {перерисовываем старый выделенный элемент}
    Inc(selItem, incr);    {увеличить/уменьшить текущий индекс выделенного элемента меню}

    {далее проверка границ значения индекса выделенного элемента, 
      т.е. напр. если достигнут конец меню и нажата "вниз" - перейти на 1ый пункт}

    DrawMenuItem(itemInd, true);  {перерисовываем новый выделенный элемент}
  end;

  begin
    {инициализация граф. режима}
    selItem := 1;   {выделяем первый элемент}
    DrawMenu();   {рисуем меню}

    repeat
      key := readkey;   {считываем нажатие клавиши...}
      Case key of
        #80 : ChangeIndex(1);        {-Up-}
        #72 : ChangeIndex(-1);       {-Down-}
        #13 : ExecuteAction();          {-Enter-}
    until key=#27;   {...пока не нажата Esc}

    ...
    {выход из графического режима}
  end;



Что-то в этом роде. Экспериментируй.


--------------------
...все в мире относительно
PM   Вверх
Irin
Дата 15.11.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Nicholas_S, Буду пробовать 
PM MAIL   Вверх
XupyprMV
Дата 16.11.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я в свой время для нормальной графики юзал TMT Pascal http://www.tmt.com. Там есть такая забавная процедурка:
 
procedure SetSVGAMode(XRes, YRes, BPP, VMode: Word);

Sets SVGA video mode with given resolution and color depth. 
PM MAIL WWW ICQ   Вверх
Nicholas_S
Дата 16.11.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



XupyprMV, насколько я понял, он работает минимум с DOS 32-bit, PM. А это уже не 16.  smile 


--------------------
...все в мире относительно
PM   Вверх
Irin
Дата 19.11.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите найти ошибку в коде! (паскаль)
Задача: удалить из матрицы все строки и столбцы, на пересечении которых стоит максимальный элемент. Вот процедура удаления:
Код

procedure udal(A:matrix;f:fnkt{ищет max });
          var i,j,p,q:integer;
          begin
               for i:=1 to n do
                    for j:=1 to m do
                         if a[i,j]=poisk_max(A) then
                         begin
                             for p:=1 to m do
                                  for q:= i to n do
                                  a[q,p]:=a[q+1,p];   
                             n:=n-1
                           {аналогично со столбцом} 
                         end; 
          end;



n-число строк, m-столбцов
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

2. Публиковать ссылки на варез

3. Оффтопить

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

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

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


 




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


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

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