Дали мне на днях год назад программу одну доработать — редактор планов, причем программу дали а исходники ее — черт знает какой давности (половины функционала нет, может это и к лучшему).
Дело в том, что эта программа делалась методом Ctrl+C Ctrl+V и на представление данных больно смотреть его просто нет как такового, вместо этого используется обработка компонентов на форме, активно задествовав свойство «Tag».
Пример первый (некоторые вещи опускаю, дабы не загромождать) — введение класса объекта, который можно таскать по полю, вроде не страшно:
TMyImage = class (TImage)
...
procedure OnMouseDown(...
procedure OnMouseUp(...
procedure OnMouseMove(...
end;
Далее следуют конкретные объекты (наследование по прежнему от сами видите чего):
TSklad = class (TImage) procedure OnMouseDown(... procedure OnMouseUp(... procedure OnMouseMove(... procedure DrawSklad; //Обратите внимание end;TProhod = class (TImage) procedure OnMouseDown(... procedure OnMouseUp(... procedure OnMouseMove(... procedure DrawProhod; end;TKran = class (TImage) procedure OnMouseDown(... procedure OnMouseUp(... procedure OnMouseMove(... procedure DrawKran; end;
И это еще не все! В каждом экземпляре создавалось свое контекстное меню для работы с этим объектом и в зависимости от режима отображения (в редакторе нужен для непонятно чего) это меню менялось на лету.
Наследование от TImage конечно хорошо, но одно из требуемых нововведений – возможность распечатать как чертеж (со всеми вытекающими последствиями)
О базе данных можно сказать еще пару теплых слов. У реальных объектов есть куча параметров, так вот автор сей программы решил себе сократить труд – заменил всю кипу параметров на два: длинна и ширина. Да еще и картинки, изображающие данные объекты, в виде растровых файлов, должны лежать в каталоге с программой. А в коде доступа к базе видны долгие страдания (по полученным данным — 4 месяца), т.к. в юнитах висит модуль «dbf», компонент TDbf предназначен для избавления приложения от пут BDE, но автор, видимо не разобрался с этим добром и решил все сварганить с помощью BDE (А модуль так и не убрал).
Чтото мне подсказывает, что мне прийдется переписывать программу с нуля.