Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Редактор блок схем

75K
08 апреля 2015 года
@lexy
28 / / 28.02.2015
подскажите, как можно реализовать программу для построения блок схем, и генерации из нее кода, рисовать необходимо в stringgrid, небольшие наброски в прикрепленном архиве.
Прикрепленные файлы:
215 Кб
Загрузок: 881
446
08 апреля 2015 года
Meander
487 / / 04.09.2011
Надо продумать логику и алгоритм отрисовки блок-схемы. Как будут рисоваться и отображаться горизонтальные и вертикальные линии, стрелки, прямоугольники, ромбы, текст и другие элементы блок-схем? Затем, продумать алгоритм генерации внутреннего представления кода, который соответствует блок-схеме. Соответственно, генерация и редактирование кода должны происходить по событиям добавления и удаления элементов блок-схемы. Когда внутреннее представление кода завершено, его можно преобразовать в тест, который будет сохранен в текстовый файл. Это грубый и общий план действий.
Не понятно зачем использовать stringgrid, компонент, предназначенный для отображения табличной информации. Или Вы хотите использовать его также как многие используют тег table в html, т.е. как сетку, в которую можно вставлять изображения с элементами блок-схемы. По-моему, будет не очень сложно рисовать на холсте все необходимое, но таблицу тоже можно, конечно.
326
11 апреля 2015 года
sadovoya
757 / / 19.11.2005
Цитата:
Соответственно, генерация и редактирование кода должны происходить по событиям добавления и удаления элементов блок-схемы.

Зачем? Можно генерацию вынести в конечный этап.

Цитата:
небольшие наброски в прикрепленном архиве

От автора хотелось бы услышать, как он себе представляет всю программу в целом? Какое ТЗ и какая архитектура?. Пока я увидел только похвальное желание использовать классы. Но рано писать классы пока нет четкой ясности их назначения и взаимодействия. Опять же - StringGrid. Что, он навязан в ТЗ или автор сам выбрал? StringGrid накладывает определенные "правила игры", придется подстраиваться под взаимодействие именно с этим компонентом.

75K
11 апреля 2015 года
@lexy
28 / / 28.02.2015
StringGrid-требование, а программу представляю так, на stringgrid рисуется какие-либо элементы(выбираем через speedbutton.glyph), в ячейку элемента вписывается значения, после этого проверяем все ячейки stringgrid, смотрим что в них и выводим соответственный код в memo.
326
11 апреля 2015 года
sadovoya
757 / / 19.11.2005
Не густо :(
Насчет рисования вот, по-моему, правильный подход здесь (в самом конце).
Так проще с обработчиком onDrawCell взаимодействовать (он ведь все ячейки перерисовывает сразу). Имею ввиду, что можно такое компактное решение обеспечить:
 
Код:
//из вышеуказанного источника
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var elem: TElem;
begin
  elem := TElem((Sender as TStringGrid).Objects[ACol, ARow]);
  if elem <> nil then
    elem.Draw( (Sender as TStringGrid).Canvas, Rect);
end;
Полиморфизм, предложенный в том посте, вам может тоже пригодится.
Можно рисовать на канве, можно выводить картинки. Вывод текста тоже можно на канву делать с помощью TextOut, например.
Но классы должны и для генератора кода что-то содержать...
326
13 апреля 2015 года
sadovoya
757 / / 19.11.2005
Исходник, иллюстрирующий сказанное. Без обработки исключений и проч., лишь сама идея. Вариант без полиморфизма. Использовать полиморфизм или нет, решать вам - зависит от того, какую архитектуру будете организовывать.
Прикрепленные файлы:
5 Кб
Загрузок: 855
75K
14 апреля 2015 года
@lexy
28 / / 28.02.2015
Project_Scheme_2
Прикрепленные файлы:
239 Кб
Загрузок: 840
326
15 апреля 2015 года
sadovoya
757 / / 19.11.2005
Мда... Ну, для начала, как вы думаете, что происходит у вас здесь:
 
Код:
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  (Sender as TStringGrid).Objects[StringGrid1.Col, StringGrid1.Row]:=
    TDecision.Create;
  (Sender as TStringGrid).Objects[StringGrid1.Col, StringGrid1.Row]:=
    TOutput.Create;
end;
Кстати, забыл у себя в примере обработать ситуацию, когда уже заполненная клетка повторно щелкается. Надо вначале удалить старый объект. Выкладываю поправленный исходник. Для разнообразия сделал рисование (для простоты - эллипса) вместо загрузки картинки из файла. А если все-таки картинка из файла нужна, то правильней ее загрузить лишь один раз и сохранить в приватном поле, а не считывать при каждой перерисовке. Я в прошлом примере так не оптимально сделал для упрощения класса, не надо в реальном коде так.
Прикрепленные файлы:
2 Кб
Загрузок: 816
75K
17 апреля 2015 года
@lexy
28 / / 28.02.2015
Upd
Прикрепленные файлы:
230 Кб
Загрузок: 825
326
19 апреля 2015 года
sadovoya
757 / / 19.11.2005
Чтобы закончить с отрисовкой, вот пример использования полиморфизма при рисовании объектов-фигур, наследников общего класса.
Прикрепленные файлы:
3 Кб
Загрузок: 794
75K
21 апреля 2015 года
@lexy
28 / / 28.02.2015
Upd2
Прикрепленные файлы:
230 Кб
Загрузок: 807
75K
28 апреля 2015 года
@lexy
28 / / 28.02.2015
new project
Прикрепленные файлы:
283 Кб
Загрузок: 882
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог