Консультация № 145151
26.09.2008, 23:20
0.00 руб.
0 1 1
Подскажите пожалуйста, как составить программу для нанесения условных графических обозначений радиодеталей на схему с выбором типа элемента из меню и указанием его местоположения мышью,к тому же необходимо обеспечить возможность точной корректировки координат через диалоговое окно с помощью текстовых полей. Буду благодарен хотя бы за частичный ответ.

Обсуждение

давно
Мастер-Эксперт
425
4118
27.09.2008, 10:07
общий
это ответ
Здравствуйте, Makarov!
Примерный план таков.
Во-первых надо выбрать, в каком виде схема будет хранится на диске. Рисунок сразу же отпадает, т.к. редактировать его перетаскиванием элементов трудно. Самый простой способ - файл типа INI, где первая секция, типа [General], содержит общие настройки схемы, а остальные секции (например [Transistor] [Diod] [Resistor] и т.п.) содержат настройки самого элемента.
Каждый элемент схемы это отдельная картинка. Картинки можно хранить как в ресурсах программы, так и в виде отдельных картинок в файлах. Таким образом, программа считывает поочерёдно каждую секцию из INI-файла схемы, создаёт TImage указаных в файле размеров, загружает связанную с элементом картинку и помещает её в указаном в файле месте.
Связи между элементами так-же удобно сделать в виде картинок. Есть для этого хороший элемент типа TShape, который позволяет размещать несколько предопределённых там картинок - квадратики, овалы, линии. Для соединений нужны именно линии. Координаты соединений также хранятся в INI-файле.
При создании новой схемы, согласно выбранному в меню элементу схемы, создаётся новый TImage, в него загружается связанная с элементом картинка. Далее Вы щёлкаете в определённом месте формы мышкой, определяете координаты щелчка. Это удобно сделать в событии формы OnMouseDown, т.к. в процедуру обработки сразу же передаются координаты мышки и какая кнопка мышки нажата. И по этим координатам размещаете Image:
Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Image.Top:=X;
Image.Left:=Y;
...
End;

Корректировка координат.
Проще это сделать перетаскивая элемент мышкой. В событии OnMouseDown запоминаете, какой элемент Вы тащите, а в OnMouseUp присваиваете этому элементу новые координаты.
Надеюсь Вам это поможет в реализации идеи, т.к. подробные объяснения займут не одну страницу.
Задавайте уточняющие вопросы в мини-форуме Вашего вопроса.

Приложение:
Небольшой пример INI-файла:

[VT1]
Picture=transistorbipolyarn.bmp
Top=100
Left=20
Name=KT814A
[VT2]
Picture=transistorpolevoy.bmp
Top=100
Left=50
Name=КП303А
[VD1]
Picture=diodshotki.bmp
Top=200
Left=70
Name=1N6263
[DA1]
Picture=microshema_8_nog.bmp
Top=100
Left=230
Name=КР574УД1А

и так далее
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа