Хочу поделиться с вами частью своего небольшого опыта разработки ПО.
А именно, расскажу вам историю реализации одной бредовой идеи,
посетившей меня в конце 11 класса, когда я еще не осознавал,
насколько это сложно - создавать законченный программный продукт.
(Сам "продукт" в скором времени будет доступен в открытых исходниках).
В то время я немного увлекался компьютерной графикой, а также потихоньку
делал программку для защиты на экзамене по информатике (тогда я и начал
понимать, что такое законченный программный продукт).
Программка та не представляет никакого интереса даже для меня, важны те
условия, в которых я ее создавал - Borland Delphi 7 с ее весьма
своеобразным редактором кода. Я очень долго ковырялся в цветах
подсветки синтаксиса и как-то раз мне в голову пришла идея.
"А почему бы не сделать такую подсветку, где цвет фона текста меняется
не резко, а плавно? Ведь на это же, наверное, намного приятней смотреть!"
И я решил сделать компонент, который предоставлял бы такую подсветку.
И тут же возникла первая проблема. Готового текстового редактора,
который позволил бы управлять прорисовкой своего фона, у меня не было.
Как присобачить подсветку синтаксиса к обычному текстовому полю, я тогда еще не знал
(впрочем, и сейчас я знаю, что это нехорошо). А в интернете поискать не догадался,
верите ли.
Так что я принял решение написать редактор с нуля. С абсолютного делфионского нуля,
точнее, с TCustomControl'а, который всего лишь предоставляет окно и поверхность
для рисования. Естественно, образцом для подражания был пресловутый делфионский
редактор.
Что ж, дурному коту, как и бешеной собаке, семь верст не крюк - я принялся за работу.
Задумывались ли вы когда-нибудь, как устроено обыкновенное текстовое поле, такое
как в Блокноте? Скорее всего да, поскольку если вас не отпугнуло начало моего рассказа,
то, наверное, вы знакомы с компьютером если не на уровне "физиолога", то на уровне
"терапевта" уж точно. И я рад за вас, если этот "простенький механизм" для вас
действительно простенький. Мне он таковым не кажется до сих пор.
А мне предстояло реализовать нечто подобное самому, от начала и до конца.
Странно, но я не испугался. "Меньше знаешь - крепче спишь". Ведь и Линус Торвальдс,
как он пишет в своей книге "Just For Fun", признается, что если бы он заранее
знал, сколько работы ему предстоит проделать, врядли бы взялся за свой проект.
Впрочем, у незнания всегда есть и негативные последствия, причем, к сожалению,
они обычно преобладают.
Но вернемся к нашим баранам.
Целью было создание VCL-компонента, аналогичного делфионскому редактору кода,
с подсветкой синтаксиса, свободной кареткой и т.д.,
отличающегося "революционным" графическим дизайном. А также,
разумеется, создание простенького редактора на основе этого компонента.
Целью не являлось создание редактора общего назначения, а лишь редактора кода.
Целевая аудитория - все, кому надоело писать ad hoc программки в "блокноте",
и кто, к тому же, любит вещицы с переподвыпердовертом. (Такие как я :)
Раз уж я делаю редактор кода, то можно ограничиться моноширинными шрифтами.
А следовательно - просто разбить компонент на прямоугольные ячейки одинакового
размера. Это во много раз упрощает задачу.
Остается лишь реализовать "текстовый" интерфейс к этой прямоугольной решетке и
должным образом редактировать решетку при нажатии клавиш. Всё!
А вот о том, что же я сделал, и почему это неправильно, я напишу завтра.
Комментариев нет:
Отправить комментарий