Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/23: Рейтинг темы: голосов - 23, средняя оценка - 4.70
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219

Разместить пять регионов на форме

10.10.2020, 14:26. Показов 4626. Ответов 17

Студворк — интернет-сервис помощи студентам
Всем привет!
И снова к вопросу о регионах.

Создать регион не проблема. Создаем массив точек, забрасываем в CreatePolyRgn (или что нужно) и всё.
Вот вопрос: а если нужно разместить пять регионов на форме, мы создаем пять массивов точек? Или можно создать первый регион, перезалить массив точек, создать другой регион, перезалить, и т.д...?

Слыхал, что можно создавать массив регионов и проверять точки, обращаясь к каждому элементу массива циклом. Кто-нибудь работал таким методом? Какого оно? Как тогда потом удалять все регионы? Просто очистить массив регионов?

Заранее всем спасибо!

Добавлено через 22 минуты
И, если не затруднит, поясните, пожалуйста:
Если необходимо создать регион по форме "Бублик", то лучше делать WINDING при создании или комбинировать через RGN_XOR? Нельзя, чтобы вылазили лежащие под формой окна (т.е. дырки до других окон и рабочего стола не нужны, нужен именно регион в форме бублика). (я подозреваю, чтобы не было всех этих сквозных дырок, не нужно вызывать "SetWindowRgn(HANDLE, Region, True)")
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2020, 14:26
Ответы с готовыми решениями:

Разместить пять прямоугольников
Здравствуйте! Необходимо разместить на странице 5 прямоугольников, ширина и высота каждого 45% от ширины экрана, 4 из них прижаты к...

Разместить на форме картинку
помогите разместить на форме картинку в WinApi:) и помогите прописать кнопку на закрытие формы http://yadi.sk/d/C_w9AaXQSQTG3

Как разместить на форме CommandBar?
Pomogitya-aaa! Kak s pomosh'u VB6 ili VBA(v hudshem sluchae) rasmestit' na forme CommandBar i na nem CommandBarButton v prozesse...

17
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 11:48
Лучший ответ Сообщение было отмечено Komandor_Yan как решение

Решение

Регион становится "дыркой в окне" только если применить его к окну. Что конкретно нужно сделать? Как выглядит этот "Регион по форме "Бублик""?
Если просто закрасить нужно, то можно попробовать нарисовать эллипс толстым пером.

Добавлено через 2 минуты
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
а если нужно разместить пять регионов на форме, мы создаем пять массивов точек?
Можно использовать тот же массив. После создания объекта региона этот исходный массив систему уже не интересует.

Цитата Сообщение от Komandor_Yan Посмотреть сообщение
Как тогда потом удалять все регионы?
Каждый регион удаляется функцией DeleteObject(rgnID);

Добавлено через 4 минуты
Если объединяли 2 региона, то их по прежнему 2. Лишний надо удалять после объединения регионов, если он более не нужен.
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 13:09  [ТС]
AzAtom, спасибо! Хоть кто-то помог.

Насчет бублика: я имел в виду создать регион-кольцо. Ну как кольцо и палец - кольцо считается регионом, палец нет.
Красить не понадобится, максимум это выделение границ (напр., пунктиром). Это же Canvas?

С WINDING/RGN_XOR что посоветуете?
Цитата Сообщение от AzAtom Посмотреть сообщение
DeleteObject(rgnID)
rgnID мы сами присваиваем? Мне кажется, можно пройтись циклом по массиву регионов и просто делать DeleteObjoect(arrayofrgns[i]).

Цитата Сообщение от AzAtom Посмотреть сообщение
Лишний надо удалять после объединения регионов, если он более не нужен
Да, спасибо, видел, так делают. А если он понадобится в дальнейшем, то можно его оставить...
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 13:30
Лучший ответ Сообщение было отмечено Komandor_Yan как решение

Решение

Цитата Сообщение от Komandor_Yan Посмотреть сообщение
максимум это выделение границ (напр., пунктиром). Это же Canvas?
Там регион не нужен. Вот рисование полигона пунктиром:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Draw1(Canvas: TCanvas);
var
  poly: array of TPoint;
begin
  SetLength(poly, 4);
  poly[0].X :=  10;
  poly[0].Y :=  10;
  poly[1].X := 300;
  poly[1].Y :=  10;
  poly[2].X :=  10;
  poly[2].Y := 200;
  poly[3].X :=  10;
  poly[3].Y :=  10;
//  TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame);
  Canvas.Pen.Style := psDot; // Тип линии - пунктир.
  Canvas.Polyline(poly);
end;
Добавлено через 1 минуту
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
rgnID мы сами присваиваем?
Нет. Это возвращается функцией CreatePolygonRgn.
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 15:01  [ТС]
AzAtom, у меня будет разрисовка границ региона, поэтому регион придется оставить) А нужно ли тогда координаты каждого региона сохранять (или можно по вызову региона получать координаты)?
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 15:10
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
(или можно по вызову региона получать координаты)?
В смысле?

Добавлено через 5 минут
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
будет разрисовка границ региона, поэтому регион придется оставить)
Всё ещё непонятно, зачем там нужен именно регион. Как это должно выглядеть? Есть рисунок?
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 15:17  [ТС]
AzAtom, рисунка нет. Но есть смысл сего:
* на картинку наслаиваются регионы
* по нажатию на часть картинки определяется задетый регион (кстати, как предотвратить при создании регионов наслоение?)
* при определении задетого региона выводятся данные по региону (отдельный файл)
* при определении задетого региона дополнительно обрисовывается граница (нуу, как если в карте на компьютере нажать на здание, и оно подсвечивается рамочкой по форме здания).

Цитата Сообщение от AzAtom Посмотреть сообщение
(или можно по вызову региона получать координаты)?
Тут я имел в виду, что если обрисовка идет через Canvas, то ему понадобятся координаты. А их нужно отдельно от региона хранить или можно обратиться к региону и достать оттуда координаты полигона?
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 15:33
Лучший ответ Сообщение было отмечено Komandor_Yan как решение

Решение

Komandor_Yan, теперь понятнее. Вот здесь Долго грузит программа делали типа атласа. Там я набросал 3 варианта. Третий вариант при попадании мышки в регион рисует этот регион на карте. При щелчке мышкой можно вызвать информацию по этому региону (стране).
Да, хранятся и массивы с координатами полигонов для отрисовки и массив с регионами для проверки попадания координат.

Цитата Сообщение от Komandor_Yan Посмотреть сообщение
как предотвратить при создании регионов наслоение?
Аккуратнее задавать координаты.


Я как-то давно подобное делал, но без регионов. Написал функцию, вычисляющую попадание точки в полигон, а так же, с возможностью масштабирования. Регионы масштабировать не позволяют, насколько знаю. А для создания списка вершин полигона написал отдельную программку.
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 15:46  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Вот здесь Долго грузит программа делали типа атласа. Там я набросал 3 варианта. Третий вариант при попадании мышки в регион рисует этот регион на карте. При щелчке мышкой можно вызвать информацию по этому региону (стране).
Да, за те наброски, AzAtom, отдельная благодарность! Именно на них я изучал регионы! И оттуда же почерпнул массив регионов)

Цитата Сообщение от AzAtom Посмотреть сообщение
хранятся и массивы с координатами полигонов для отрисовки
Значит создаю отдельно массив с координатами для каждого региона (получится массив массивов координат каждого региона).

Цитата Сообщение от AzAtom Посмотреть сообщение
Аккуратнее задавать координаты.
Я имел в виду отдельное приложение, в котором человек может обводить мышкой область. Если программно, то конечно.

Цитата Сообщение от AzAtom Посмотреть сообщение
Написал функцию, вычисляющую попадание точки в полигон, а так же, с возможностью масштабирования
Интересно было бы обсудить...
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 16:14
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
Интересно было бы обсудить...
А что там обсуждать? Стандартный алгоритм - обходятся все рёбра полигона, попутно умножая координаты на коэффициент, и проверяется, с какой стороны от указанной точки находится ребро. Если ребро, допустим, справа от точки, то увеличивается счётчик "справа", если слева, то увеличивается счётчик "слева". В конце смотрим, если значение в счётчиках нечётные, то точка внутри полигона. В принципе, можно считать только с одной стороны, так тоже должно работать.
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 16:29  [ТС]
AzAtom, а если сделать отдельное окошко и на нем масштабировать картинку в области мышки на регионе, Canvas будет на масштабе виден или нет?
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 17:02
Komandor_Yan, как это? Canvas это не визуальный компонент, а объект, содержащий в себе DC и средства для рисования.

Что именно должно быть видно?

Добавлено через 3 минуты
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
отдельное окошко и на нем масштабировать картинку в области мышки на регионе
Это как? Просто менять размер Image и чтобы он сам сжимал картинку? Думаю, это не хорошая идея. Но дело хозяйское. Какие там будут координаты я не знаю, надо проверять.
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 17:08  [ТС]
Должен был быть виден Canvas, но раз не визуальный, то ясно.
Я видел как-то масштабирование в отдельное окошко, но ладно, ничего страшного, что не будет видно.
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 17:21
Komandor_Yan, canvas это холст, на котором рисуется. Он сам по себе обычно бесполезен, он работает в составе других компонентов. Например, у формы есть Canvas, с помощью которого рисуется на форме. У TBitmap есть Canvas, с помощью которого рисуется на этом битмапе. То есть, не обязательно это видимый на экране компонент.

Canvas это класс-оболочка над виндовым DC (device context) и сопутствующими объектами: Pen, Brush и т.д.
0
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 17:27  [ТС]
AzAtom, т.е. если отрисовать Canvas на Bitmap, то это ничего не покажет при масштабировании, верно?
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
12.10.2020, 18:19
Komandor_Yan, не понимаю, какой Canvas отрисовать? Canvas это у тебя фигура какая-то?

Добавлено через 7 минут
Битмапы они в памяти находятся, их так не видно. Чтобы их было видно их надо вывести на какой-нибудь визуальный компонент. У canvas есть метод CopyRect, он позволяет выводить картинку с масштабированием. Ещё можно попробовать Canvas.StretchDraw();
1
33 / 28 / 6
Регистрация: 24.03.2020
Сообщений: 219
12.10.2020, 19:35  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
какой Canvas отрисовать
Ой, ты прав, извини, PolyLine (ну или Shape может подойдет, но лучше поли).

CopyRect интересно.... попробую... спасибо!
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,331
13.10.2020, 02:19
Цитата Сообщение от Komandor_Yan Посмотреть сообщение
если отрисовать Canvas на Bitmap, то это ничего не покажет при масштабировании, верно?
Если отрисовать полилинию на битмапе, то она там и будет. Смотря какой битмап. Если просто битмап в памяти, то (сразу) видно не будет. Если битмап в Image.Picture.Bitmap, то сразу видно будет, если это видимый Image, конечно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2020, 02:19
Помогаю со студенческими работами здесь

На форме разместить 300 объектов
Всем ку. Столкнулся с проблемой. Нужно на форме разместить 300 объектов в vb6 принимает только 255 Что можно придумать такого го, что...

Справочники разместить на одной форме
Здравствуйте опытные товарищи. Хочу сделать ввод и редактирование справочников на одной форме. Как здесь или если справочники будут...

Можно ли на форме разместить гиперссылку?
Можно ли в C# на форме разместить гиперссылку? И как это сделать? Ну вообще можно ли как нибудь их добавлять? Чтобы можно было...

Разместить на форме элементы Label
В качестве функции f(x) выбрать три любых математических функций. Создайть форму. Разместить на форме элементы Label, TextBox и...

Можно ли разместить Ellipse на обычной форме?
Имеется ввиду System.Windows.Shapes.Ellipse запихнуть как-то в System.Windows.Forms. Без всякого WPF..?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru