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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2008, 22:13   #11
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

Всем привет!
Воспользовавшись статьёй набросал себе подобные объекты. Всё работает, кроме:
1. При добавлении новой точки к ломаной линии, возникает ошибка при зоздании канвы (в комментариях написано подробно)
2. При завершении конструирования возникала ошибка при удалении объекта. Закомментировав само уничтожение ошибка пропала. Но думаю это не выход.
3. Не работают сообщения на перехват сообщений от клавиатуры и колёсика мышки. Причина не выяснена.

Прошу помочь, т.к. достаточного опыта в сознании компонентов ещё нет.
Так же набросал соединения, но вдохновение ушло, и не реализовал.
Буду рад любой критике.
Спасибо.
Вложения
Тип файла: rar Block-Scheme_Objects.rar (29.2 Кб, 31 просмотров)
Тип файла: rar Block-Scheme_Program.rar (4.3 Кб, 29 просмотров)
Format C: вне форума Ответить с цитированием
Старый 26.04.2008, 10:02   #12
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Посмотрел Ваш код. Похвально. Проделана большая работа. Понятно, почему иссяк энтузиазм. Когда сложность проекта достигает определенного уровня становится трудно отследить все взаимосвязи.
Мы и используем объекты для уменьшения сложности. ИМХО в Вашем случае компонзиция объектов неоправдано усложнена. Недостаточно продумано, что может делать каждый из классов.

Использование отдельного режима для конструирования объекта (ObjectType) ИМХО не очень хорошая идея. Посмотрите на IDE Delphi. Объект вставляется сразу с параметрами по умолчанию и становится текущим. Текущего объекта достаточно для остальных операций. Изменение параметров текущего объекта проще, чем отдельный режим для его конструирования.

По ошибке с TBaseCanvas. Он у Вас создается повторно в цикле.
Нужно создавать или до цикла или внутри него, или использовать разные переменные.

Код:
  FBaseCanvas:=TBaseCanvas.Create(Canvas);
  With Canvas Do Begin
    ...
    For I:=0 To FObjects.Count-1 Do Begin
      ...
      // FBaseCanvas:=TBaseCanvas.Create(Canvas);
      TBaseObject(FObjects[I]).Draw(FBaseCanvas);
      // FBaseCanvas.Free;
    End;
  End; 
  FBaseCanvas.Free;
По-моему нет смысла создавать объект TBaseCanvas. Достаточно передать сам объект Canvas в методы рисования.

Чтобы не быть голословным, прикрепил простенький проект с примером.
Там только основное в описании объектов и методы рисования.
Может найдете для себя что-нибудь интересное.
Вложения
Тип файла: rar shema.rar (89.5 Кб, 27 просмотров)
alexBlack вне форума Ответить с цитированием
Старый 26.04.2008, 11:34   #13
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

2alexBlack:
Спасибо, довольно интересное решение. На днях посмотрю подробнее.

TBaseCanvas сделал для того, что в последствии хочу сделать масштабирование, и что бы не грузить переводом форму, решил сделать отдельно.
Два раза она не создаётся - это уже мои эксперименты. Пробовал даже создавать при создании контейнера, всё равно ошибка. Только какая-то странная - появляется только при вставке точки.

По поводу ObjectType:
С помощью этой перемменой создаётся объект который заносится в FCurrentObject. Т.е. используется только для созднания. Для всех последующий действий используется FCurrentObject.

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

P.S. А как такой маленький ехе получился?
Format C: вне форума Ответить с цитированием
Старый 26.04.2008, 14:10   #14
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Format C: Посмотреть сообщение
TBaseCanvas сделал для того, что в последствии хочу сделать масштабирование, и что бы не грузить переводом форму, решил сделать отдельно.
Два раза она не создаётся - это уже мои эксперименты. Пробовал даже создавать при создании контейнера, всё равно ошибка. Только какая-то странная - появляется только при вставке точки.
Я не добился появления ошибки. Только если двойное создание. Поэтому не могу сказать что не так.

Цитата:
Сообщение от Format C: Посмотреть сообщение
По поводу ObjectType:
С помощью этой перемменой создаётся объект который заносится в FCurrentObject. Т.е. используется только для созднания. Для всех последующий действий используется FCurrentObject.
Во-во. Это мое мнение, но мне кажется достаточно одного текущего объекта.

Цитата:
Сообщение от Format C: Посмотреть сообщение
По поводу соединений:
Изначально хотел сделать соединения, как отдельную переменную у объектов, и управлять ими через сообщения установки значания и установки привязных точек.
И как можно реализовать соединения, которые имеют одну входную точку и несколько выходных, т.е. которые могут разветвлятся.
Предполагалось у каждого контакта делать поле для связи с другим контактом. Если обратили внимание, у меня объявлено поле FLink.
В этом случае контакты простых элементов не могут иметь два соединения. Вместо этого делаем отдельный объект - контактная площадка и к нему сводим все соединения. Этот объект может иметь любое количество контактов, но все они имеют одни координаты - попросту точка соединения. Это дает возможность простого перемещения элемента. Перемещаем базовую точку объекта. Соответственно для всех его контактов проверяем по одной связи и если они есть, перемещаем еще и контакты связи. Еще раз повторю, это мое мнение. Есть и другие варианты реализации. Например, на концах отрезка можно неявно создавать те-же контактные площадки.

Цитата:
Сообщение от Format C: Посмотреть сообщение
P.S. А как такой маленький ехе получился?
Не обращал внимания. м.б. просто проект маленький - практически ничего не используется.
alexBlack вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание блок-схем по коду С++ Panterka Общие вопросы C/C++ 7 04.02.2018 19:21
Блок схема Лёха Помощь студентам 32 18.12.2010 18:42
Программа для Блок-Схем OrdJONY Свободное общение 9 18.05.2009 22:05
Оформление блок- схем программ для работы с файлами. Ветас Помощь студентам 1 24.02.2008 17:25