2010-02-11 2 views
0

Я все еще пытаюсь нарисовать план этажа (в BCB 6).VCL - чертеж комнаты

Я уже задал несколько вопросов. В результате Seeking floorplan design VCL toolbar я купил компоненты TMC.

Looking for non-rectangular panel VCL component получил меня близко, но не совсем там.

Итак, давайте попробуем еще раз ...


Какой-панели, я думаю. С красивыми толстыми пограничными линиями (стенами) вокруг краев, может быть, 5 или даже 10 пикселей, поэтому панели по умолчанию этого не сделают.

Я не могу просто рисовать линии отдельно, так как они должны изменять размер с помощью формы. Таким образом, я связываю строки с панелями (свойство владельца) и перерисовываю их ... (когда? Изменение размера?, Изменение размера панели?)

Или я могу создать свой собственный компонент панели.

В любом случае, мне нужно иметь возможность прерывать линии с отверстиями для дверей - или добавить компонент двери? Но тогда мне нужно связать это с панелью, в случае изменения размера формы.

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

============================================= 
|    ||  ||     | 
|    ||  ||     | 
|    ||  ||     | 
|    ||  ||     | 
=== ============= ============= ====== 
|    ||       | 
|           | 
|    ||       | 
============================================= 

См? несколько дверей; предпочтительно непрямоугольные комнаты (по меньшей мере, L-образные формы) и изменяемые по форме.

Любые идеи?

+1

Какая у вас проблема с студией TMS Diagramming? –

+0

Я не вижу, как помещать тяжелые линии вокруг tpanel (чтобы представлять стены), которые изменяются с помощью панели. Я также не вижу, как помещать в них пробелы, чтобы представлять двери. И я даже не хочу думать о L-образных комнатах. Конечно, может быть, я просто не очень старался ... вы говорите, что это может быть сделано? Это было бы хорошо знать. – Mawg

ответ

2

Я не знаю, будет ли это решение подходящим для вашего сценария, но если бы мне пришлось разрабатывать аналогичное приложение, я бы воспользовался простотой распространения с новыми компонентами в рамках VCL. Я бы построил компоненты для различных графических элементов, двери, стены и т. Д. Я бы сделал общий объект, который они могли бы наследовать.

Например, я сделал бы TFloorplanElement компонент, все мои графические компоненты могут наследовать, я бы сделать TFloorplanElement наследовать от TGraphicControl, чтобы воспользоваться Anchor имущества, переданного по TControl и Canvas обеспечивается TGraphicControl. Я бы не использовал пользовательский TPanel для этого, я не думаю, что накладные расходы на дескриптор окон, предоставляемый TWinControl, необходимы здесь.

Для стен я делаю компонент, наследующий от моего TFloorplanElement, которому даны две оконечные точки для соединения стены, это может быть либо дверь с одной стороны, либо другая стена с другой стороны, или любая другая комбинация TFloorplanElement потомки. Вам нужно иметь какое-то управление событиями, когда любой из этих углов перемещается, что вам нужно сделать в этом случае, просто скорректируйте координаты вашей стены на координаты углового элемента.

Один из способов решения проблемы с изменением формы - с помощью управления контейнером для ваших компонентов TFloorplanElement, я думаю, это то, что делает Diagramming Studio, но если вы создаете контейнерный компонент (например, TFloorplanContainer), вы может указывать положение элементов внутри в процентах или иметь коэффициент масштабирования, который был скорректирован при изменении размера контейнера. Контейнер должен использовать свои якорные свойства, привязывая его к границам собственного контейнера (т. Е. Формы).

И всякий раз, когда контейнер был изменен, вы перерисовывали содержащиеся элементы. Как я уже сказал, я не уверен, будет ли это решение, которое будет работать для вас, или с помощью студии диаграмм, которую вы используете, но это один из подходов, который я бы рассмотрел, если бы был на вашем месте.

+0

+1 примерно для того, о чем я думал. Но, там есть решение ленивого человека? – Mawg

+0

Спасибо, что нашли время ответить. – Mawg

2

Посмотрите на TSimpleGraph, который может стать для вас огромным началом. Он находится по адресу:

Это БЕСПЛАТНЫЙ компонент, который предоставляет панель с огромным набором методов, свойств и мест для обработчиков событий, а эффект довольно шикарный. Они обеспечивают отличную демонстрацию exe, которая показывает некоторые из возможностей. Они определили объекты для различных фигур и линий, но с некоторой работой я думаю, что вы могли бы добавить свои собственные вещи, например, стены и т. Д.

Если это сработает для вас, TsimpleGraph обеспечит приятное жилье, позволяя вам сосредоточиться на мясо вашего приложения.

+0

Я не знаю, как я пропустил это семь лет назад, но я обязательно буду изучать его сейчас. Это выглядит очень многообещающим, с первого взгляда на веб-сайт. Я углубится в код и посмотрю, смогу ли я его использовать – Mawg

Смежные вопросы