Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68

Координаты курсора на разных экранах

23.12.2015, 21:54. Показов 3747. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Фон развернут на весь экран, соответственно на разных экранах будут разные координаты.
Мне нужно сделать кликабельным только определенные области фона, но как? Всегда же эти области будут иметь разные координаты в соответствии с экраном.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.12.2015, 21:54
Ответы с готовыми решениями:

Лейбл с радиокнопками на разных экранах
Добрый вечер. Есть маленькая проблема с версткой. Для описания проблемы взял простой пример. Есть лейбл и три радиокнопки: <html> ...

Отображение в браузерах и на разных экранах
Есть сайт сверстан мной - https://piratelifepf.000webhostapp.com/, только вот на разных экранах он отображается по-разном, особенно футер и...

Размер картинки на разных экранах
Добрый день. Не понимаю как сделать. Есть ImageView, например, максимальная ее высота 300dp и ширина на весь экран. Каким размером должна...

25
26 / 26 / 16
Регистрация: 24.11.2015
Сообщений: 110
23.12.2015, 23:37
Мышь обычно привязывают к экранным координатам, потому как размер окна разный, а в играх есть ещё и мировые координаты
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
24.12.2015, 01:42
Слишком много неизвестных, чтобы что-то конкретное предложить.. Что за фон, в вашей ли он программе, как определяются нужные области?...
0
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
24.12.2015, 09:23  [ТС]
pictureBox1, в нем картинка, которая при запуске программы растягивается на весь экран (в моем случае, это 1980 на 1080).
Должна быть область например, 10 на 10 где-нибудь в углу - клик на которую запустит что-то дальше..
Но как на экране, например, 1600 на 900 проверить клик по этой же области 10 на 10 в том же углу?

Можно и альтернативу.. Поместить еще pictureBox'ов, чтобы не ловить клики по координатам. Но тогда как заставить эти боксы, при развороте на весь экран основного pictureBox1, переместиться туда же, где они стояли в конструкторе?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
24.12.2015, 12:50
Ну так-а что мешает считать координаты не абсолютные, а относительно краев picturebox, если размер в пикселях нужной области никак не меняется?
0
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
24.12.2015, 21:36  [ТС]
Не меняется? На каждом экране будут разные координаты. Ведь изображение из бокса растягивается на весь экран.

А если добавлять других боксов с картинками, то я не знаю, как сделать так, чтобы они также растягивались и были на том же месте, что и в конструкторе...

Нет никакой сетки, как в Excel, чтобы программировать только некоторые квадраты?

Добавлено через 2 часа 56 минут
Почему точка (1383; 784) на экране 1980х1080 через пропорцию для экрана 1600х900 - это (1117;653), а если тыкнуть на экране 1600х900 в ту же точку, что и на первом экране получается (1151; 653)?

Куда уехал икс?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
24.12.2015, 22:08
ммм, так получается, что нужен не квадрат 10 на 10, а какой-то конкретный кусок изображения? А нельзя ли его опознать как-то по-другому-через цвета к примеру? Вообще общий смысл задачи какой?
0
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
24.12.2015, 22:29  [ТС]
Форма, без рамки развернута на весь экран (1980х1080). В ней pictureBox1, закрепленный "в родительском контейнере". А в нем картинка в StretchImage.

Если грубо, то это "поиск предметов"
Они (предметы) разбросаны по всему pictureBox'у.

Проблема заключается в том, что для каждого экрана каждый предмет будет находится в другом месте.
Я пытался вывести point через пропорцию:
1980 - (известный икс)
1600 - (найти)
И аналогично с игреком. Но как я писал выше, икс почему-то уехал дальше, и не на 3-5, а на 34...

Также пытался добавить еще pictureBox'ов(чтобы не искать координаты), а в них добавил "предметы".
Но в этом случае проблема в том, что: в конструкторе все находится на своих местах, но при запуске(т.е. развороте pictureBox1), при различных настройках, остальные боксы "летают" по всему экрану, но не встают на то место, где стояли в конструкторе.
0
26 / 26 / 16
Регистрация: 24.11.2015
Сообщений: 110
24.12.2015, 23:37
Адаптация под различные экраны приложений Windows - почитайте статью

Для проверки столкновений используйте Rectangle у него есть функция "IntersectsWith"
в место того, чтобы плодить pictureBox, тем более вам они пригодятся для отображения на экране
C#
1
e.Graphics.DrawImage(image, rect, rectBound, GraphicsUnit.Point);
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.12.2015, 01:26
Цитата Сообщение от Viewed Посмотреть сообщение
1920х1080
Наверное это имелось в виду-в противном случае я не встречал такого разрешения. А по теме-было бы неплохо увидеть весь проект и попробовать с ним что-нибудь пошаманить.
0
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
25.12.2015, 08:31  [ТС]
Верно, 1920

Для примера взяла за основу экран 1280х1024. Суть в попадании по "свечки". Если мимо - ничего не происходит, если попал - скрыть ее из списка.
Вложения
Тип файла: rar Test2.rar (734.1 Кб, 9 просмотров)
0
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
25.12.2015, 08:46  [ТС]
Вот сейчас запустил на экране 1600х900 - не работает, кликабельная область сместилась..
Поэтому у вас тоже может не сработать
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.12.2015, 12:17
Не пойму в чем проблема-у меня все отлично работает через пропорции. Попробуйте добавить вот этот обработчик к picturebox:
C#
1
2
3
4
5
6
7
8
9
10
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Size screensize = new Size(1280, 1024);
            var rec = new Rectangle((int)Math.Round(900D * ((double)pictureBox1.Width / (double)screensize.Width)),
                    (int)Math.Round(720D * ((double)pictureBox1.Height / (double)screensize.Height)),
                    (int)Math.Round(50D * ((double)pictureBox1.Width / (double)screensize.Width)),
                    (int)Math.Round(110D * ((double)pictureBox1.Height / (double)screensize.Height)));
                e.Graphics.DrawRectangle(Pens.Red, rec);
                e.Graphics.Flush();
        }
После чего свечка будет обведена красным прямоугольником, как ни масштабируй. Или я что-то не заметил?
1
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
25.12.2015, 16:14  [ТС]
Это черная магия!

Я все переводил в int'ы, может в этом моя ошибка..

Чтобы не ломать гугл, можно узнать тут: как проверить попал ли пользователь в этот прямоугольник?
Просто моя подборная конструкция с координатами была понятна мне и не работала, а как обращаться с выше написанным рабочим кодом - я, как чайкник() не понимаю.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.12.2015, 16:38
Лучший ответ Сообщение было отмечено Viewed как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            Size screensize = new Size(1280, 1024);
            var rec = new Rectangle((int)Math.Round(900D * ((double)pictureBox1.Width / (double)screensize.Width)),
                    (int)Math.Round(720D * ((double)pictureBox1.Height / (double)screensize.Height)),
                    (int)Math.Round(50D * ((double)pictureBox1.Width / (double)screensize.Width)),
                    (int)Math.Round(110D * ((double)pictureBox1.Height / (double)screensize.Height)));
            if (rec.Contains(e.Location))
            {
                MessageBox.Show("Попал!");
            }
        }
Добавлено через 4 минуты
Цитата Сообщение от Viewed Посмотреть сообщение
Я все переводил в int'ы, может в этом моя ошибка..
Ну я тоже перевожу все в int, но расчеты-то надо вести double, ведь там не целые числа.
1
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
25.12.2015, 17:29  [ТС]
Отлично! Огромное спасибо)

Хм, есть еще одна не реализованная идея. Даже не начинал писать, пока как облако весит.
Может быть знаете - тык.

Про игру против компьютера, я как чайник, пока молчу и хочу поломать над этим голову самостоятельно. Поэтому пока человек на человека

Если реализовать это на кнопках, то будет 9 блоков по 9 кнопок.
Вы не выбираете, на каком из девяти полей играть. Это определяется предыдущим ходом соперника.
Допустим я походил на третий блок, значит соперник должен ходить на втором. Вопрос в следующем: как отключить кликабельность всех кнопок, кроме второго блока? А дальше по цепочке - отключить второй блок, включить первый и тд. А если предыдущий блок уже закрыт открыть все блоки, кроме тех, что уже закрыты.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.12.2015, 17:42
Цитата Сообщение от Viewed Посмотреть сообщение
Если реализовать это на кнопках, то будет 9 блоков по 9 кнопок.
Для того, чтобы создать блоки, есть UserControl. У него, в свою очередь, надо сделать свойство, которое будет отключать Enabled сразу у всех кнопок, составляющих блок. Хотя, правда, я с трудом понимаю, зачем там вообще именно кнопки. Ну а все поле надо тоже надо оформить как UserControl. А логику вынести в отдельный класс.
На счет ИИ-гуглите про алгоритм минимакс и вообще теорию игр.
1
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
25.12.2015, 20:24  [ТС]
Возможно дикий вопрос
По какому принципу можно сделать уровень сложности, хотя бы в классических крестиках-ноликах?
Ввести вероятность того или иного хода компьютером?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.12.2015, 21:22
Вы для начала про алгоритмы почитайте, которые там используются, оттуда станет понятным и про уровень сложности
0
1 / 1 / 1
Регистрация: 20.09.2015
Сообщений: 68
25.12.2015, 22:22  [ТС]
Я посмотрел одно англоязычное видео. Некоторые моменты мне не понятны, но все они не касаются алгоритма, по которому компьютер будет решать куда ходить.

Просто на данный момент стоит обусловить пару комбинаций, чтобы компьютер не допустил человека к "двойному выигрышу", т.е. когда заблокировав одну победу все равно остается другая (надеюсь я понятно объяснил).

Хочется из банальных крестов сделать что-то поинтересней. Не даром же я выше дал ссылку на новые кресты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2015, 22:22
Помогаю со студенческими работами здесь

Проблема с отображением скрипта на разных экранах
Столкнулся с проблемой на своем сайте. При просмотре с экрана 1280х960 скрипт отображается как надо - РИСУНОК №1 При просмотре с...

Одинаковый размер форм на разных экранах
Как сделать так, чтобы форма имела фиксированные высоту и ширину на разного размера диагоналей экранах?

Неправильное отображение скрипта на разных экранах
Имеются 2скрипта:colorbox(увеличивающее изображение по середине с прозрачным фоном) and slidorion(слайдер слайдшоу + меню ...

Перенос строк в нужных местах на разных экранах
Как сделать, чтобы строчки текста, к примеру на Iphone 6, переносилиcь в определенных местах, т.е. не произвольно, а после конкретных слов?...

Autolayout and constraints - некорректное расположение контроллов на разных экранах
Подскажите пожалуйста, есть к примеру вот такая вьюшка Т.е на вьюшке имеем к примеру 4 кнопки... суть в том, что когда запускаем...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru