Вверх ↑
Этот топик читают: Гость
Ответов: 2200
Рейтинг: 673
#1: 2014-05-21 01:59:48 ЛС | профиль | цитата
Все изменения и новые элементы внесены в пакет. Достаточно обновиться: SVN
Все ниже перечисленные изменения внесены в стандартный набор элементов HiAsm, обновитесь или установите последнюю версию.

Скриншот вкладки панели элементов (слева устаревшая, справа новые элементы)
Скриншот примера FallingLetters.sha в котором на низ окна падают буквы.
Итак по порядку:
  • 1. Элементы создания регионов особо не пострадали.
  • 2. Элементы комбинирования регионов, нуждались в переделки, так как работают на данный момент не логично. Вот доказательство: test_combine.sha попробуйте запустить схему (на текущей версии) и у вас не получится на выходе регион. А если сравнить с такими распространенными элементами как StrCat и Math то логично предположить что к результирующему региону прибавиться (с комбинируется [OR]) новый. Но не тут то было. Это в основном и поправлено, проверьте схему на обновленных элементах. Еще добавлено результат комбинации, зачем будет понятно позже.
  • 3. Добавлены элементы создания регионов из текста RGN_Text и из траектории RGN_Path (см. RGN_Path.sha в архиве с примерами).
  • 4. Добавлен элемент RGN_Array Массив регионов (добавление, удаление, запись, сохранение). Так как регионы не получится хранить в обычном массиве или списке.
  • 5. Добавлен элемент RGN_File: Сохранение и загрузка региона.
  • 6. Добавлен элемент RGN_Draw: Рисование региона. Можно регион нарисовать (заливка, контур, контурные штриховка, изображение шаблон, инвертировать цвета) на объекте выводе графики.
  • 7. Добавлен элемент RGN_InRect: Проверка нахождения региона в прямоугольнике. Ну тут вроде все понятно из описания. Если хоть одна точка региона попадает в область прямоугольника вы об этом узнаете.
  • 8. Добавлен элемент RGN_GetData: Данные о регионе. Можно узнать некоторые данные о регионе: отступ слева и сверху, ширина, высота и прочая не особо нужная информация.
  • 9. Добавлены элементы трансформации региона: RGN_Offset: Перемещение региона, RGN_Rotate: Поворот регион, RGN_Transform: Трансформация региона. Ну с первыми двумя вроде все понятно, а вот третий позволяет масштабировать, скашивать, отражать.
  • 10. В элемент RGN_SetToWindow: Применить регион к окну, добавилось сброс региона с окна (9 этажа) и получение региона с окна.
  • 11. Самое интересное в этой серии это элемент RGN_Collision: Коллизия регионов. Что же в нем интересного? И зачем вам может понадобиться коллизия (столкновение) каких-то там регионов? Все очень просто. С помощью коллизии регионов можно обрабатывать столкновение всего что угодно (двухмерное). К примеру обычные окна при перетаскивании или столкновении машинок в игре. Элемент может определить коллизию двух регионов или определить коллизию одного региона с с каждым регионом из массива (см. пункт 4).
  • 12. Добавлен элемент RGN_Convertor: Конвертирование региона (регион в поток, поток в регион).
  • 13. Внесены дополнения в элемент ScreenShort: Снятие скриншотов с окон и с экрана. Добавилась возможность снимать скриншот не всего окна, а по заданному региону (свойство UseRegion False/True). Если регион не прямоугольной формы, то фон заливается выбранным цветом (свойство Color).
  • У всех элементов новые стильные иконки (сам малявау ).
       Теперь о коллизии поподробней. По идущему в архиве примеру(CollisionMoveElements.sha) можно убедиться что обработка коллизий окон делается достаточно просто и удобно и не требует сложных арифметических вычислений. Вместо прямоугольных окон, можно обрабатывать коллизию и других фигур. К примеру у GameEngine коллизия обрабатывается только прямоугольника с прямоугольником.
       Коллизия регионах сделана на функции CombineRgn, она при объединении двух регионов (RGN_AND) выдает результат, по которому и можно понять имеют хоть одну общую точку два региона или нет. Вот и все. Никаких вычислений, только двигай себе регионы вместе с нужными объектами(см. пример:RGN_Collision_SmallGame.sha). И при этом если была коллизия двух регионов, то по скомбинированному региону (он напомню создается из наложенных участков двух регионов), можно узнать и участок коллизии.
      С обработкой коллизии может справится даже RGN_Combine (с внесенными небольшими изменениями). Достаточно подать два региона и по результату комбинации определить было столкновение или нет.
       Только вот нигде мне не попадалось (интернет, книги) такой метод обработки столкновений. Даже не знаю насколько правильно использовать для этого регионы, но все работает и при этом достаточно неплохо.
       В примере Chaos.sha обрабатывается коллизия 100 элементов.

    Для тестирования:
    Обновите или установите последнюю версию HiAsm или
    1. Скачать архив с элементами: rgn_2014_11_11.zip
    2. Из папки new установить элементы (перетащить ini файлы на рабочее поле HiAsm). Элементы устанавливаются в вкладку: ОкноРегионы.
    3. Заменить элементы из папки change. Файлы pas в папку Elementsdelphicode, файлы ini в папку Elementsdelphiconf, файлы ico в папку Elementsdelphiico. Желательно оригиналы предварительно скопировать в отдельную папку, для возможности восстановления.
    4. Скачать архив с примерами: test_rgn_2014_11_11.zip.
  • карма: 11

    9
    файлы: 5test_combine.sha [1.3KB] [594], fallingletters.jpg [53.3KB] [2777], test_rgn_2014_11_11.zip [19.1KB] [542], rgn_panel_old_and_new.png [10KB] [1728], rgn_2014_11_11.zip [52.1KB] [503]
    Голосовали:miver, tom-it, flint2, ser_davkin, MAV, tig-rrr, foksov, kamakama, Konst
    vip
    #1.1контекстная реклама от партнеров
    Разработчик
    Ответов: 26066
    Рейтинг: 2120
    #2: 2014-05-21 02:47:28 ЛС | профиль | цитата

    карма: 22

    0
    Ответов: 165
    Рейтинг: 7
    #3: 2014-05-21 11:40:25 ЛС | профиль | цитата
    Молоток, нужные вещи.
    Как функцию SetWindowRgn сдружил со св-вом Transparent=true?
    карма: 1

    0
    Ответов: 758
    Рейтинг: 112
    #4: 2014-05-21 15:08:11 ЛС | профиль | цитата
    sla8a, нет иконки для RGN_Array
    карма: 1

    0
    Ответов: 2200
    Рейтинг: 673
    #5: 2014-05-21 17:33:27 ЛС | профиль | цитата
    flash1103, вопрос не понятен. Ничего особенного не делал.
    miver писал(а):
    нет иконки для RGN_Array
    Случайно не попала, добавил.
    Обновлены архивы. Добавлены 3 примера. Chaos.sha и FallingLetters.sha примеры обработки коллизии без применения регионов к окну. В Chaos.sha обрабатывается коллизия 100 элементов, сложной формы.

    Скриншот примера FallingLetters.sha в котором на низ окна падают буквы.

    карма: 11

    0
    Ответов: 165
    Рейтинг: 7
    #6: 2014-05-22 13:21:05 ЛС | профиль | цитата
    sla8a писал(а):
    flash1103, вопрос не понятен. Ничего особенного не делал.

    Имелось в виду что в проекте присутствует один из ниже перечисленных элементов:
    Label
    RadioButton
    CheckBoxRush
    RadioButtonRush
    ProgressBarRush
    имеющих свойство Transparent.
    Так вот, если свойство прозрачности не используется то регион по картинке нормально обрезается, если используется то обрезки не происходит или вернее регион формируется не там(режет основную форму в начале).
    Я в свое время воевал с шейпами и не мог добиться нормальной работы функции
    flash1103 писал(а):
    SetWindowRgn сдружил со св-вом Transparent=true?

    пример
    [burl]http://forum.d2h.ru/forum_serv.php?q=56&id=3747[/burl]
    ------------ Дoбавленo в 13.21:
    Проверил, у тебя то-же самое
    карма: 1

    0
    Ответов: 2200
    Рейтинг: 673
    #7: 2014-05-26 20:50:38 ЛС | профиль | цитата
    flash1103, если вам не трудно то объясните более понятней.
    flash1103 писал(а):
    если свойство прозрачности не используется то регион по картинке нормально обрезается
    О какой картинке вообще речь? Регион не имеет ничего общего с картинками. Если конечно вы не создаете элемент с помощью: RGN_OutlinePicture - Контурный регион.
    flash1103 писал(а):
    пример[burl]http://forum.d2h.ru/forum_serv.php?q=56&id=3747[/burl]
    Может вы вставили не ту ссылку? По этой ссылки скриншот размером 1280x1024 по которому не возможно понять как вы используете регионы.
    flash1103 писал(а):
    воевал с шейпами
    Какое значение у этого слова?
    nesco, а как понимать ваш пост?

    карма: 11

    0
    Ответов: 16884
    Рейтинг: 1239
    #8: 2014-05-26 21:23:28 ЛС | профиль | цитата
    shape(произносится ШЕЙП) - форма, фигура, состояние, придать форму.
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    0
    Ответов: 165
    Рейтинг: 7
    #9: 2014-05-26 21:34:52 ЛС | профиль | цитата
    sla8a писал(а):
    Какое значение у этого слова

    это русский транслит,форма и в Африке форма.
    Использую функции регионов нормально,внутри своих элементов.
    Что-бы отсечь вопросы пример,на ваших элементах.
    http://forum.d2h.ru/forum_serv.php?q=56&id=3751
    -по маске рисунка создается треугольный регион и применяется к childpanel
    -А теперь в label включи вышеуказанное свойство

    карма: 1

    0
    Ответов: 824
    Рейтинг: 138
    #10: 2014-05-26 21:56:56 ЛС | профиль | цитата
    flash1103, Эта проблема связана, имхо, с KOL, и проявляется не только с новыми элементами RGN, но и со стандартными. Вот в этой сборке "Сборка компилятора FPC 2.6.4 и KOL 3.21 (32 и 64 бита)" такая проблема отсутствует.
    карма: 1

    0
    Ответов: 2200
    Рейтинг: 673
    #11: 2014-05-26 22:03:15 ЛС | профиль | цитата
    flash1103, спасибо за разъяснение. Вот скажите как работает такая схема:
    code_33673.txt (вставьте рисунок треугольника в элемент) ?
    Как написал выше sashaoli элементы RGN_ тут совершенно не при чем. Проблема не в них.

    карма: 11

    0
    файлы: 1code_33673.txt [1KB] [604]
    Ответов: 165
    Рейтинг: 7
    #12: 2014-05-26 22:22:48 ЛС | профиль | цитата
    Да, я знаю что не в элементах,ещё в прошлом году наткнулся что это именно
    Setwindowrgn(hwnd,rgn,flag); виновна, либо её обёртка в кол-е(сама фунция winapi)
    ------------ Дoбавленo в 22.20:
    Про
    sla8a писал(а):
    code_33673.txt
    не понял
    Я специально label поставил так-как есть св-во transparent
    а тут его нет.
    ------------ Дoбавленo в 22.22:
    Пардон, увидел
    карма: 1

    0
    Ответов: 2200
    Рейтинг: 673
    #13: 2014-05-26 22:37:53 ЛС | профиль | цитата
    flash1103 писал(а):
    Setwindowrgn(hwnd,rgn,flag); виновна, либо её обёртка в кол-е(сама фунция winapi)
    Да не виновата она. Вот замените строку в RGN_SetToWindow
    SetWindowRgn(h, rgn, _prop_ReDraw);
    на вот эту:
    if SetWindowRgn(h, rgn, _prop_ReDraw) then _debug ('ok') else _debug('error');
    И увидите что в тестовых схемах (вашей и моей выложенных выше) будет ОК. Функция получает все необходимое (идентификатор окна, регион) и применяет регион к окну.
    Сколько уже раз, здесь на форуме обсуждалась проблема с прорисовкой из-за Transparent=True у Label.
    Выделив элемент и нажав F1 можно в самом низу прочитать:
    Замечания писал(а):
    Использование св-ва Transparent может привести к неверной работе в отрисовке остальных элементов формы. Поэтому рекомендуется не использовать данную возможность без особой необходимости

    Так что повторю:
    sla8a писал(а):
    элементы RGN_ тут совершенно не при чем

    карма: 11

    0
    Разработчик
    Ответов: 26066
    Рейтинг: 2120
    #14: 2014-05-26 23:26:20 ЛС | профиль | цитата
    [offtop]
    sla8a писал(а):
    а как понимать ваш пост?

    Это из серии -- жду окончания интересного сериала [/offtop]

    карма: 22

    0
    Ответов: 2200
    Рейтинг: 673
    #15: 2014-05-26 23:31:29 ЛС | профиль | цитата
    nesco, [flood]а о чем сериал? Прикола не понял [/flood]
    карма: 11

    0
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)