| 
| 
 | Вопрос # 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™ (статус: Доктор наук), 30 октября 2009, 08:25 [#2]:Объясни, для чего это всё надо. Может быть твою задачу можно решить как-то проще? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | 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™ (статус: Доктор наук), 30 октября 2009, 09:18 [#5]:Блин, под такую задачу идеально подходит TreeView + XML для хранения. Но если хочешь оставить всё как есть, то координаты вычисляются с помощью вот таких методов TControl:
 
 
 ClientToParent();
ClientToScreen();
ParentToClient();
ScreenToClient();
 Мучайся дальше.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  7 апреля 2011, 19:51: Вопрос закрыт (решение принял автор вопроса — Егор): какой только фигнёй я не страдал, а! Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |