Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 342

/ вопрос закрыт /

Здравствуйте, уважаемые эксперты!
Есть форма, на форме несколько компонентов (панели, кнопки и т.п.). Нужно начертить прямую между двумя любыми компонентами. Если использовать Canvas формы, то, соответственно, линия чертится "под" компонентами, встретившимися на пути. И ещё - компоненты хранят свои координаты (left, top) относительно родителя. Если нужно провести линию между двумя компонентами, которые лежат непосредственно на форме, проблем нет. А если компоненты лежат "внутри" панели (которая сама лежит внутри другой панели), тогда как получить координаты компонента относительно формы?
Отсюда пара вопросов:
1) как начертить линию поверх всех компонентов;
2) как перевести координаты элементов в какую-то "общую" систему координат?
Может, рисовать прямо поверх экрана?

Егор Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Егор (статус: 10-ый класс)
Вопрос отправлен: 30 октября 2009, 08:03
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 30 октября 2009, 09:18; участников в обсуждении: 2.
Егор

Егор (статус: 10-ый класс), 30 октября 2009, 08:05 [#1]:

т.е., к примеру, один компонент может лежать внутри панели, которая лежит внутри панели, а другой - прямо на форме. нужно провести линию между левыми верхними углами этих компонентов.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

min@y™ (статус: Доктор наук), 30 октября 2009, 08:25 [#2]:

Объясни, для чего это всё надо. Может быть твою задачу можно решить как-то проще?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 30 октября 2009, 08:37 [#3]:

Когда-то лет 100 назад я писал на заказ программу управления радиостанцией, с помощью которой осуществлялся радииообмен с удалённым пунктами, оснащёнными такими же станциями. Интерфейс был простой: ScrollBox, на нём Image с картой местности, поверх неё прозрачный PaintBox для рисования и куча потомков TPanel, обозначающих положение удалённых пунктов, их состояния (вкл/выкл и т.п.), и ещё одна панель - централный пункт, на котором и стоит комп с моей программой. Радиообмен - посылка 14-ти байт и приём ответного сообщения - обозначался рисованием эллипсов, описанных вокруг панелей, принимающих участие в обмене, и линии, соединяющей их центры, со стрелками на концах.

Может тебе нужно именно вот таким макаром?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 30 октября 2009, 08:48 [#4]:

задание было таким - создать диаграмму проектов. каждый проект должен содержать другие проекты. внутренние не должны выходить за "родителей". плюс должны быть показаны зависимости - один проект зависит от другого.
я перегрузил компонент TPanel. нужно добавить подпроект - добавляю "подпанель" к нужной панели. на каждую мою панель сделал общий обработчик, который по уникальному id знает, что нужно делать с этим проектом. рисованием собственно панели, отлавливанием сообщений windows (нажата мышь/клавиша) и т.п. я не занимаюсь - панель делает это всё сама, удобно.
но вот тут и стала "проблема" - как получить координаты какого-то из "подподподпроектов"? чтобы потом начертить линию к зависимому подподпроекту, который может быть частью совсем другого проекта.

можно было, конечно, по другому всё сделать, но, честно говоря, в данном случае такой способ тож приемлем.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

min@y™ (статус: Доктор наук), 30 октября 2009, 09:18 [#5]:

Блин, под такую задачу идеально подходит TreeView + XML для хранения.
Но если хочешь оставить всё как есть, то координаты вычисляются с помощью вот таких методов TControl:

  • ClientToParent();
  • ClientToScreen();
  • ParentToClient();
  • ScreenToClient();

Мучайся дальше.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

7 апреля 2011, 19:51: Вопрос закрыт (решение принял автор вопроса — Егор): какой только фигнёй я не страдал, а!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.