Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2009, 19:19   #1
WaruiOrochi
Новичок
Джуниор
 
Регистрация: 28.11.2009
Сообщений: 2
Восклицание Разработка "рабочего поля" программы сим. эл.схем (Delphi)

Здравствуйте.

Необходимо реализовать "рабочее поле" программы как в "примере", на Delphi. То есть, есть виртуальные элементы (которые тоже надо как-то придумать) и их необходимо соединять "проводниками". К одному выводу виртуального элемента может быть подведён только один "проводник". Так же должны быть узлы, т.е. что бы к одному проводнику можно было подключить другой. И всё это должно как то двигаться при нажатии кнопки мышы и перетаскивании. Примеры таких программ (с таким интерфейсом): WorkBench, Proteus и многие другие для разработки электронных схем.

Подскажите в какую сторону двигаться для реализации вышеизложенного, перепробовал множество вариантов, один из которых рисовал на Canvas Image, но там тоже возникли свои проблемы.
Изображения
Тип файла: gif пример_.gif (12.2 Кб, 61 просмотров)

Последний раз редактировалось WaruiOrochi; 28.11.2009 в 19:21.
WaruiOrochi вне форума Ответить с цитированием
Старый 28.11.2009, 20:53   #2
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Даже не знаю чем вам помчь((( Таких компонентов я не знаю, но могу сказать как бы делал это я:
1. Каждый элемент - это отдельный класс с его полями и настройками. (Тут будет все начиная от координат элемента на форме, и заканчивая электрическими параметрами данного электронного прибора)
2. Собственно я бы сделал палитру, на которой лежали бы все элементы.
3. Далее так: нажал на элемент на палитре, нажал на основную форму - на форме отрисовался бы данный элемент, а в некий массив (стек, очередь, дерево - это как вам уже будет удобнее) добавился элемент который вы кинули на форму.
4. В каждом элементе есть ссылки на дочерний(дочерние) элементы. По умолчанию все ссылки должны быть установлены в nil. По мере соединения элементов ссылки должны заполняться указателями на дочерний элемент. Зачем нужны ссылки? Это чтобы узнать какие элементы нужно соединить с какими.

И вот наступает самый сложный этап. Нужно как-то соединять элементы проводниками. Тут вам поможет либо теория графов с его поиском оптимального пути, либо старый проверенный способ - "в лоб" искать пути, по которым нужно соединять элементы.
Вот как-то так.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 28.11.2009, 21:05   #3
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Сейчас пишу симулятор эл. схем, только над граф. интерфейсом я еще не заморачивался.
http://programmersforum.ru/attachmen...1&d=1258321704
Пишу на С++, юзаю OpenGL, ООП. Все пишу сам.

Последний раз редактировалось Levsha100; 28.11.2009 в 21:07.
Levsha100 вне форума Ответить с цитированием
Старый 28.11.2009, 21:13   #4
WaruiOrochi
Новичок
Джуниор
 
Регистрация: 28.11.2009
Сообщений: 2
По умолчанию

В принципе к этому я и стремился и поля были и координаты всех выводов каждого элемента, проблема возникла в отрисовке одного элемента и в перемещении проводника. В элементе проблема заключается в том что я не знаю как его отрисовать, картинкой не удобно (не эффективно), через lineto, movieto как то неудобно в плане перерисовки. Вот и мучаюсь с вопросом как бы "правильно " создать компонент, а уж свойствами то я его обеспечу, мало того при клике на компонент он должен выделяться и перетаскиваться мышкой. Вот в этом плане не можешь мне помочь? можно даже с кусочком кода
Цитата:
Сообщение от Levsha100 Посмотреть сообщение
Сейчас пишу симулятор эл. схем, только над граф. интерфейсом я еще не заморачивался.
http://programmersforum.ru/attachmen...1&d=1258321704
Пишу на С++, юзаю OpenGL, ООП. Все пишу сам.
Можно и на С++ опыта программирования у меня не много, я электронщик а не программист,но написать надо , поэтому буду рад помощи даже на С++

Все это замечательно, но не стоит забывать про наличие кнопки "Правка"...

Последний раз редактировалось mihali4; 28.11.2009 в 21:46.
WaruiOrochi вне форума Ответить с цитированием
Старый 28.11.2009, 21:25   #5
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Ну с отрисовкой либо картинка, либо lineto, moveto. Другого способа я не вижу. А с перемещением так вроде проблемм никаких я не вижу. У тебя есть свойства OnMouseUp, OnMouseMove, OnMouseDown.
OnMouseUp - срабатывает когда ты нажимаешь на кнопку мыши. Код примерно такой:
Код:
if (Button = mbLeft) then
  begin
   {Тут нужно найти нажал ты элемент или нет, и если нажал то установить флаг что был выбран компонент. Это не сложно т.к. у тебя есть массив в котором лежат все компонеты помещенные на форму}
   flag:=true;
   xPred:=X;
   yPred:=Y;
  end;
OnMouseMove - срабатывает когда идет передвижение мыши.
Код такой:
Код:
if (Flag) then
  begin
   {Если был установлен флаг выбора элемента}
    UnDrow(xPred,yPred);//Зарисовать элемент на старом месте
    Drow(X,Y);//Нарисовать элемент на новом месте
   xPred:=X;
   yPred:=Y;
  end;
OnMouseDown - срабатывает когда кнопка мыши была отпущена
Код такой:
Код:
if (Button = mbLeft) then
begin
 Flag:=false;
end;
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Ищу книгу Андрей Шкрыль "Разработка клиент-серверных приложений в Delphi" virus_t Свободное общение 9 11.08.2009 21:42
Помогите в написании редактора блок-схем на Delphi (Очень важно "Диплом") IIpopoK Помощь студентам 3 13.02.2009 16:27
Работа с String Grid - помогите написать "Табель рабочего времени" Deicider Помощь студентам 3 29.11.2006 20:59