Шаг 19.
Visual Prolog.
Окно изображения

    На этом шаге мы рассмотрим окно изображения.

    Сейчас добавим еще одно окно, в котором будем показывать изображение. Изображения в этом примере хранятся в файлах растровой графики, а управлять растровыми изображениями, используя VPI, очень просто. Выполните следующие шаги:

  1. Создайте новый исходный модуль Picture.pro.
  2. Добавьте пункт Picture Window в подменю Test меню Task.
  3. Создайте новое окно Picture.
  4. Зайдите в эксперт окон и диалоговых окон и добавьте код по умолчанию для окна Picture в модуле Picture.pro.
  5. Используйте эксперт окон и диалоговых окон для добавления предложения для окна Task, которое вызывало бы окно Picture при выборе команды Test | Picture Window.
  6. Запустите программу и посмотрите, создается ли окно при вызове команды Test | Picture Window.
  7. Вернитесь в эксперт окон и диалоговых окон и добавьте предложение для события e_Update в окне Picture.
  8. Добавьте следующий код для предложения e_Update:
       win_picture_eh(_Win,e_Update(_),0):-!,
          % не забудьте использовать правильный путь к требуемому ВМР-файлу
          Picture = pict_Load("..\\RES\\WIN\\COPY.BMP"),
          ClntRCT=win_GetClientRect(_Win), 
          pict_GetSize(Picture, Width, Height,_Size), 
          pict_Draw(_Win, Picture, ClntRCT,rct(0,0, Width,Height),rop_SrcCopy),
          pict_Destroy(Picture)
    

    Это предложение нуждается в небольшом объяснении.

    Сначала предикат pict_Load вызывается с именем файла, содержащего растровый рисунок. Предикат возвратит указатель растрового рисунка, который загружается в память. Вы можете использовать меню Edit | Insert, чтобы вставить имя файла для любого растрового рисунка.

    Изображение может быть растянуто до любого размера, поэтому мы должны найти размер и окна, и изображения.

    Затем мы вызываем предикат pict_Draw с дескрипторами окна (Win) и изображения (Picture), а также с двумя прямоугольниками. Последний параметр для pict_Draw определяет, как изображение совмещается с пикселами, которые уже принадлежат окну. Здесь же мы только определяем, что хотим копировать изображение в окно (замещение существующих пикселов).

    Наконец, уничтожаем изображение, чтобы оно не занимало место в памяти.

    Нам необходимо добавить предикат win_lnvalidate к событию e_Size.

    Результат работы приложения изображен на рисунке 1:


Рис.1. Результат работы приложения

    Созданное приложение можно взять здесь (418,5 Кб).

    На следующем шаге мы рассмотрим создание окна дерева.




Предыдущий шаг Содержание Следующий шаг