Такая проблема.
Я пытаюсь сделать сапёр, для курсовой делал.
Особенность в нём то, что можно разные формы для ячеек поля ставить(квадраты, шестиугольники, треугольники, и.т.п)
Проблема такая,
в качестве элементов поля у меня компоненты timage
при использовании например, треугольников, эти компоненты как бы перекрывают друг друга. лежат один под другим. и получается, что вроде бы кликаешь на одну ячейку, а попадаешь по соседней(
нужно сделать так, чтобы эти компоненты реагировали на щелчки мыши только в той области,где они отображаются, не перекрывая соседнии.
или может можно использовать другие компоненты?
не знаю, смогу ли лучше объяснить(
заранее спасибо.
25 августа 2008 в 21:00
Программа "узнает" о формах ячеек из файла-архива(там и графика и описания взаимодействия ячеек и т.п.)
сейчас пытаюсь сделать всё как сказали одним компонентом. с полигонами как-никак разобрался.главное, понял сам принцип. Про регионы раньше вообще нигде ничего не замечал. спасибо за идею
23 августа 2008 в 23:01
Если программа не знает какие формы могут быть – думаю никак… но если есть выбор от пользователя квадрат или многоугольник – в руки уравнение прямой и пооверять где находится точка (щелчек мыши) относительно всех ограничивающих линий и так в цикле по всем ячейкам
21 августа 2008 в 23:01
А зачем изобретать велосипед? Делаешь всё поле одним компонетом, а под каждую ячейку создаёшь Регион. Этот регион и отрисовывать можно ( FillRgn ) и в OnMouseClick проверять PtInRegion.
21 августа 2008 в 21:05
алгоритм создания карты изображений в html, где входными данными является список координат, думаю бы идеально подошёл. есть ли где нибудь описание алгоритма или код?
может кто что подскажет?
21 августа 2008 в 21:04
timage никак не сойдет. можно на крайний случай tshape вроде, но это извращение какоето
21 августа 2008 в 21:04
Спасибо.
а может подскажите по какому алгоритму можно рассчитать?
Для квадратов, как в оригинале то всё ясно, а вот в других случаях…
К тому же задумано так, что программа заранее не знает какие формы могут быть использованы в игре, они подгружаются по отдельности из ресурсфайлов с графикой и набором инструкций. Так что тут необходимо некоторое универсальное решение.
может быть есть какая нибудь статья с подобным примером?
21 августа 2008 в 17:00
Согласен с Саматом
21 августа 2008 в 15:03
я так понял C++ Builder? Лучше переопределить OnPaint и в нем самому рисовать треугольники, шестиугольники и проч. а по событию OnMouseClick надо получить координаты клика мышкой и по ним рассчитать в каком треугольнике(шестиугольнике и проч) был произведен клик.