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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика на Паскале 
:(
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

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

3. Оффтопить

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

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

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


 




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


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

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