Несколько советов начинающему программисту в Delphi

Идея написания этой статьи родилась у меня очень просто. Я довольно много общаюсь на форумах. И, как ни странно, довольно у многих людей возникают очень похожие вопросы. Ответить на хотя бы часть из них я и попытаюсь в этой статье. Заодно я хочу поделиться опытом, как сделать программы наиболее быстрыми, красивыми, защищёнными.Идея написания этой статьи родилась у меня очень просто. Я довольно много общаюсь на форумах. И, как ни странно, довольно у многих людей возникают очень похожие вопросы. Ответить на хотя бы часть из них я и попытаюсь в этой статье. Заодно я хочу поделиться опытом, как сделать программы наиболее быстрыми, красивыми, защищёнными. Ну что ж, приступим:

1) Не забывай архивировать свои программы специальными ЕХЕ-архиваторами – они не только уменьшают место, занимаемое на диске, но и увеличивают скорость выполнения программ. Почему же увеличивают скорость, ведь программе нужно время для распаковки? Так то оно так, но сама программа становится намного меньше и поэтому намного быстрее запускается, предварительно аккуратненько распаковав себя в память.

Примеры таких программ:

ASPack, скачать можно на официальном сайте программы — http://aspack.com — ASPack Software

UPX — http://hh-team.h14.ru/downloads/upx125w.zip

PECompact — http://bitsum.com (официальный сайт разработчика)

2) Если программа важная — защищай от взлома. О защите твоего софта есть много статей, так что будут только примеры программ.

Юзать читый UPX с его досовским интерфейсом неудобно – удобнее всего использовать какую-нибудь Windows оболочку. Она прилагается к архиву UPX , так что отдельно её скачивать не нужно. В данной оболочке есть функция защиты программы от декомпрессии. Также можно использовать специальные программы для защиты, например, ASProtect — ASPack Software, т.е. произведено тем же человеком, что и ASPack. Внимание! ASPack и ASProtect конфликтуют между собой, так что придётся выбирать – либо хорошее сжатие, либо более-менее хорошая защита. Скачать ASProtect можно на http://www.aspack.com.

Как вообще работают такие программы? Принцип программы прост – чтобы нельзя было что-то запустить, это что-то надо сломать. То есть они немного «портят» исполняемый файл – сама исполняемая часть не изменяется, или изменяется незначительно, а вот заголовок портится более сильно. Т.е. Windows ещё понимает, что этот файл можно запускать, а программы-взломщики (дизассеблеры) уже так не считают. ВНИМАНИЕ! Опытному взломщику такая защита – не помеха! Серьёзный хакер легко взломает любую стандартную защиту. Этими методами вы сможете обломать лишь «детей» и взломщиков средней руки. Но именно такими взломщиками сейчас и переполнена сеть. Не каждый сможет стать серьёзным взломщиком. Так что большая часть всё-таки останется в пролёте J

По статистике легче всего разархивировать программу, упакованную чистым UPX – прям в самой программе-упаковщике есть такая опция. Однако если использовать UPX Shell и возможность «Защитить файл от декомпрессии», то разархивировать такой файл будет довольно сложно. По крайней мере программ, распаковывающих такой софт, я не видел :(

Очень легко разархивировать программу, упакованную ASPack’ом – есть даже программа для распаковки ASPack – ASPackDie. Тремя кликами ты сможешь вскрыть любую программу, упакованнкю этим архиватором.

ASPackDie можно скачать на страничке разработчика этой программы — http://y0da.cjb.net . Там также есть неплохие исходники. Мы ещё вернёмся к этому сайту. Также ASPackDie можно скачать и с http://hh-team.h14.ru (я надеюсь, что найти этот файл на сайте ты сможешь уже сам ;). Ещё этот файл можно скачать с http://hh-team.h14.ru/downloads/aspackd.rar.

Тяжелее всего разархивировать программу, ужатую PECompact’ом. В интеренете есть программы — жалкие попытки универсально распаковать ужатые PECompact’ом файлы. В частности, тот же Y0da попытался написать такую программу (а вот и вернулись на http://y0da.cjb.net ;) ). Но когда я скачивал этот разархиватор, он даже близко не работал.

3) Оформление программы тоже имеет важную роль. Чтобы оформить свою программу красиво, можно самому рисовать красивые картинки, писать мощные компоненты. Если сделать это – то ваша программы будет мощна, красива, уникальна (степень каждого признака зависит от прямоты твоих рук ;) ). Но это очень долго, тяжело, да и не у каждого руки прямые. Есть альтернативный вариант – использовать скин движки. Каждый нормальный движок должен уметь полностью преобразовать форму под определённый скин и добавлять полную палитру компонентов, поддерживающих этот движок. Так же должно поддерживаться неединичное количество скинов. Таких движков в интернете довольно много. Но некоторые из них слишком дорого стоят, некоторые слишком глючные, а некоторые только под определённую версию Windows. Так вот такой тебе совет, если юзаешь сторонний скин движок — сразу юзай нормальный, чтобы потом не было проблем ни со скинами, ни с регистрацией, ни с версией Windows.

Для оформления твоих программ советую тебе использовать движок AlphaSkins — http://www.alphaskins.com/index_rus.php (ссылка ведёт на стараницу закачки на официальном сайте программы). Во-первых, он явный лидер среди своих аналогов, скины всё-время обновляются и уже имеется неплохой архив. Во-вторых написан очень толково (я по крайней мере глюков не встречал ;) ). В-третьих бесплатен для жителей СНГ (так написано на официальном сайте программы, к моменту твоего прочтения статьи всё может измениться L ). Как альтернативу могу предложить FreeSkinEngine – он тоже бесплатный, но страшно глючный. Найти его можно на сайте http://bib.com.ua .

4) По возможности не забывай сохранять нужные свойства своей программы в отдельный файл. Согласись, очень неудобно, когда при запуске программы долго её настраиваешь, подбиваешь под себя, а потом при следующей загрузке всё это приходится делать заново, так как ничего не сохранилось. Юзеры этого очень не любят. Для различных программ нужно сохранять различные настройки. Чаще всего нужно сохранить ширину, высоту и позицию (Left и Top) форм программы. Также по возможности надо стараться сохранять содержимое CheckBox’ов – их настройка наиболее кропотлива. Для сохранения этих данных удобнее всего использовать INI-файлы. Они просты и удобны в использовании, невелики по размеру. Об использовании INI-файлов это, как говорится, отдельная статья :) . Найти таковую можно на http://x-planet.ru.

Также возможно сохранение в базу данных, но это не очень удобно и громоздко + размер твоей программы существенно увеличится. Но если ты уже используешь БД в своей программе, то тебе что, табличку лишнюю создать жалко что-ли?

Ещё есть возможность сохранять параметры окна при помощи каких-либо вспомогательных программ или компонентов. Пример можешь взять на http://hh-team.h14.ru в разделе Download.

5) Довольно часто люди просят дать посмотреть твой исходник. Так вот, если считаешь его очень нужным, или написанным в очень дурном тоне – лучше никому его не давай. Некоторые люди могут помочь, объяснить что-либо, показать признаки дурного тона. А некоторые могут просто засмеять тебя, или просто кинуть. Такое бывает довольно редко, и люди чаще всего стараются помочь друг другу. Но разве тебе надо, чтобы потом твой исходник продавали на базаре и за это не платили тебе ни гроша?

Если не уверен, лучше не давай – отдать всегда успеешь, а назад потом ничего не вернёшь…

Со временем исходники кажутся самому себе всё более и более извратными, но ты всё более и более понимаешь, насколько многому ты научился на этих исходниках, как они тебе помогли.

6) Перед написанием проги убедись, с какой целью ты её пишешь. В связи с этим выбором себя и веди. Ты не сможешь продавать игру, сделанную ради учёбы, за бешенные бабки, хотя именно на ней ты и научишься программировать и получишь много опыта. И наоборот, работа за деньги может оказаться очень даже скучной и бесполезной в плане твоего развития, хотя может значительно поднять материальное состояние.

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

Нужно правильно оценивать нужность твоей программы – ты не сможешь сам написать текстовый редактор лучше, чем Microsoft написали Word: они и времени уделяют этому больше и средства на это уходят огромные. Вместо написания огромной, но глючной и ненужной программы, лучше написать маленькую, или вообще плагин, но который будет реализовать что-то, чего ещё нет. Или это-то что-то будет намного лучше уже имеющегося.

7) Не забывай, твоя программа — твой ребёнок. В твоих глазах она может казаться идеальной, прекрасной и сверх-нужной, а на самом деле быть ужасно глючной, ненужной и морально уродливой. Если ты писал такую программу, чтобы отшлифовать свои навыки в программировании — не расстраивайся, ты многое узнал ;).

Но про отладку и очистку от глюков никогда не забывай. Довольно часто это занимает намного больше времени, чем написание текста программы…

Вообще, лучше отлаживать программу сразу в процессе написания – сразу помнишь все глюки и проблемы. Если же сначала написать программу, а уже потом начинать её отлаживать, то это займёт намного больше сил и времени, да к тому же ещё программа получится ужасно глючной, т.к. ты обязательно что-то забудешь ;). Конструкции try … except, try…finally тоже лучше расставлять в процессе написания. Также в них надо стараться добавлять как можно меньше текста – это облегчит не только читаемость программы, но и поможет компиллятору. По возможности лучше пользоваться отдельными проверками для различных случаев. Например, можно написать

Var
a,b: byte;
begin

try
a:=a div b;
except
Application.MessageBox(‘Error’,’Error’,0);

end;

и читаться этот код будет довольно легко и, вроде бы понятно – мы пытаемся избежать деления на 0. Но с другой стороны, могут возникнуть и другие ошибки, о которых мы не будем знать. Да и компиллятору компиллить такой код намного сложнее, чем этот:

Var
a,b: byte;
begin

If (a>=0) and (b>0) Then a:=a div b
Else Application.MessageBox(‘Error’,’Error’,0);

end;

Вообщем, никогда не забывай оптимизировать свои программы. Я только чуть-чуть затронул тему оптмизации – на эту тему статей уже навалом, так что читай и учись ;)

В этой статье я затронул лишь основные вопросы, многое мог забыть. Но тем не мене я решил помочь людям разобраться в таком нелёгком деле, как программирование. Скорее всего, ты не нашёл в этой статье чего-то, что тебя интересовало бы. Но это ещё не конец. Продолжение следует! Пиши в письмах, что ты хотел бы узнать, стучи в аську, заходи к нам на форум – команда HH-Team всегда придёт на помощь. Если я не буду чего-либо знать, то это обязательно будет знать другой тимовец, и он поделится с тобой своими знаниями.

Best regards, Храбров Дмитрий, a.k.a Dem@nXP