понедельник, 27 декабря 2010 г.

Темы для блога

Год заканчивается, и для меня очевидно, что полезных заметок в этом году больше не будет. Подводить какие-либо итоги пока рано, однако для себя делаю замечание: заметки не последовательны. Наверное надо наметить план, о чём бы хотелось мне рассказать. И что нужно сделать в блоге.

воскресенье, 12 декабря 2010 г.

Дублирование компонентов в Run-Time

Сегодня я приведу функцию, которая дублирует комопененты в момент выполнения программы. Зачем это нужно? Так сразу предложить несколько вариантов, для чего это может понадобиться, я не смогу. Однако расскажу, как я это использую в своих приложениях.

суббота, 11 декабря 2010 г.

Форматирование длительности, заданной в секундах, в строку вида ч:мм:сс

Ещё одна функция, которая может быть полезной. Например, при отображении длительности аудио- или видеофайла.

Привожу код лишь по той причине, что в глобальной сети можно найти много вариантов реализации подобной функции, но в большинстве случаев код ужасен :( У GunSmoker'а хорошо про это написано.

А функция на самом деле проста - её реализация помещается в одну строку.

среда, 8 декабря 2010 г.

Функция, возвращающая возраст человека (или животного, или просто возраст)

На днях перебирал свои старые исходники и наткнулся на такую функцию. Функция возвращает возраст на указанную дату по дню рождения. Возможно такая функция уже реализована где-то в общедоступных библиотеках, но на тот момент (где-то 2005 год) я такого не нашёл.

Плюс функция, для форматирования возраста в строковом представлении (на русском языке).

среда, 3 ноября 2010 г.

Автоматическое уничтожение объектов

В моей практике довольно часто встречается ситуация, когда на форме/фрейме (либо в каком-либо объекте), создаётся некоторое количество вспомогательных объектов (в Run-Time). Если эти объекты являются наследниками от TComponent, то в конструктор Create такого объекта можно передать компонет-владелец AOwner; владелец отвечает за автоматическое удаление объекта. Однако если вспомогательные объекты не являются компонентами, либо если нельзя явно указать компонент-владелец, то в таких случаях вспомогательные объекты приходится уничтожать вручную явно. Далее я буду говорить именно о таких случаях.

среда, 13 октября 2010 г.

Как правильно закрывать форму по Escape. Обработка диалоговых клавиш

Очень часто требуется сделать так, чтобы окно закрывалось по нажатию на клавишу Escape. Это действительно удобно. Более того, есть негласное правильно: интерфейсы ввода данных должны уметь работать и без мыши. Т.е. чтобы после ввода данных с клавиатуры можно было нажать Enter или Escape, а не тянуться за мышкой и потом целиться курсором в маленький крестик.

Возможно Вам покажется, что тема избитая и этот вопрос может волновать лишь новичков. Однако даже опытные программисты не всегда знают, как это делать правильно. В этой заметке я также расскажу, как правильно обрабатывать и другие диалоговые клавиши.

среда, 6 октября 2010 г.

Как правильно уничтожать модальную форму. Release vs Free

Модальные формы довольно распространены в Delphi. Их основное удобство заключается в легкости контроля жизненного цикла формы (Create - ShowModal - Free), плюс мгновенное получение результата выбора пользователя (ModalResult). Не буду говорить о том, что приложение, перегруженное модальными формами отталкивает пользователя, это отдельная тема.

Однако довольно часто встречается, что программисты такие формы освобождают не совсем корректно, используя метод Release, вместо Free. В простых случаях это не страшно, в более сложных может привести иногда к странным "глюкам", а иногда и к AV (Access Violation).

вторник, 5 октября 2010 г.

Число прописью

Почему-то так получается, что в последнее время я всё больше и больше занимаюсь Oracle, нежели Delphi.

Сегодня публикую функцию, которая форматирует число в строку прописью (словами) на английском языке. Особо примечательно то, что для этого используется встроенная в Oracle функция to_char, а не массивы слов.

среда, 29 сентября 2010 г.

Oracle savepoints. Динамическое создание

В предыдущей заметке я писал о проблеме, с которой может столкнуться программист при использовании явных точек сохранения (savepoint). Сегодня я приведу конкретный пример, как избежать эту проблему.

понедельник, 27 сентября 2010 г.

Oracle savepoints

В Oracle есть замечательная возможность создавать так называемые savepoint'ы (точки сохранений). Savepoint создаётся в транзакции, например перед началом изменений, а затем, после каких-то действий (если возникла ошибка, например) можно откатить транзакцию частично (до savepoint'а).

среда, 8 сентября 2010 г.

Пробное сообщение

Решил создать блог. Не потому, что теперь это модно. Просто иногда хочется делиться своими опытом и мыслями... а делиться у меня есть чем.
Итак, посмотрим, что из этого получится.

.

.