
Сначала планировалось строить одну большую библиотеку Heapar, которая будет включать в себя компоненты различного назначения и все они должны были быть по одной доступной цене. Но в последствии я принял решение все же разбивать компоненты по различным библиотекам и поэтому в Heapar Essential Library .NET стали попадать слишком простые компоненты. Конечно же за эти компоненты никто платить деньги не будет, потому что написать их не составляет особого труда, и библиотека не пользуется спросом.
Я долго думал, как поступить с библиотекой и решил сделать ее не только бесплатной, но и открытой. Теперь в архив входят полные исходные коды библиотеки и вы можете использовать их в своих проектах, изменять по собственному усмотрению и поставлять результат компиляции своим клиентам.
Вы даже можете попробовать расширить возможности библиотеки и продавать. Как показывает практика, далеко не всегда продукт должен быть уникальным и реально полезным. Очень часто людям удается продавать даже абсолютный хлам. Для меня сайт Heapar – вспомогательный проект, поэтому, поэтому тратить усилия на попытку продать слишком простой код я не хочу и усложнять эти компоненты не собираюсь.
Единственное изменение произошло на данный момент – из библиотеки был исключен компонент Small Report Control. Он теперь будет идти отдельно и платно. Этот компонент пользуется спросом. Как я понял, людей интересует не сколько сам компонент, а как он реализован мной. Цену на компонент я опустил до 500 рублей, чтобы он был более доступным.
В общем, пользуйтесь на здоровье и заходите по чаще за обновлениями библиотеки. Через месяц я планирую выпустить обновление кода, добавить новые компоненты и возможности.
[Прямая ссылка на этот пост Бесплатные .NET компоненты]
Очень часто возникает необходимость вывести пользователю форму с результатом выполнения какого-то расчета, в котором используются данные разного типа. В этом случае можно прибегать к использованию таких компонентов как WebBrowser или использовать компонент RichTextBox.
Вариант с использованием WebBrowser предлагает широкие возможности форматирования, ведь вы можете с помощью HTML оформить небольшой отчет и загрузить этот HTML в компонент браузера. Способ мощный, но не очень красивый с точки зрения реализации и оправлять данными и отображениями достаточно проблематично. Использование RichTextBox так же страдает проблемой управляемости данными, да и выводить в компонент таблицы проблематично.
Так какой же компонент использовать, если нужно отобразить пользователю текст и таблицы в виде небольшого отчета? Классической задачей является вывод утилиты Ping. В результате программа отображает строку текста с адресом компьютера, который тестируется, потом таблица с результатом пингования, и наконец текст со статистикой пингования. Какой компонент вы предложите использовать?
Чтобы не выдумывать велосипед, мы разработали новый компонент Small Report Renderer. Компонент прост в использовании и позволяет выводить в отчет одновременно текст и таблицы. Данные могут заполняться программно или загружаться из XML файла. Результат может сохраняться в текстовый файл или вы можете вывести его на печать. При этом, компонент уже содержит встроенную возможность отображения окна предварительного просмотра.
[Прямая ссылка на этот пост Маленький компонент отчета]
Сегодня я хочу показать вам, как добавить возможность перетаскивания Drag&Drop в программу, которая использует компонент Heapar .NET FileListView Control. Пример будет интересен не только тем, кто использует данный компонент, но и всем программистам .NET, потому что здесь описываются общие принципы создания Drag&Drop в .NET Framework. Та же технология может использоваться совершенно с любыми компонентами.
Создайте новое приложение и поместите на форму компонент FileListView. Для примера Drag&Drop нам понадобится еще одик компонент, на поверхность которого мы будем перетаскивать файлы или папки. Я для этого буду использовать Panel. Для панели сразу нужно изменить свойство AllowDrop на true. Для простоты я растянул этот компонент в доль кромки окна, как показао на следующем рисунке:
Создайте обработчик события ItemDrag для компонента FileListView. В созданной функции обработчика напишем следующий код:
private void fileListView1_ItemDrag(object sender, ItemDragEventArgs e)
{
try
{
if (e.Button == MouseButtons.Right)
return;
ListViewItem item = (ListViewItem)e.Item;
DoDragDrop(fileListView1.FileSystemItems[item.Index], DragDropEffects.Copy);
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message);
}
}
Основная задача кода определить, какой элемент сейчас перетягивается и начать его перетягивание. Элемент, который тянтся можно получить в свойстве Item переменной e, которую мы получаем во втором параметре функции обработчика события. После этого вызываем функцию DoDragDrop. Ей в первом параметре передается элемент, который будет перетаскиваться, а во втором параметре метод. Метод будет копирование, поэтому укажем DragDropEffects.Copy.
А вот с элементом перетягивания чуть интереснее. Тут желательно сразу же указать объект, который увидит компонент, на поверхности которого будет отпущена кнопка после перетягивания, т.е. это должен быть объект перетягиваемого файла. В Heapar .NET FileListView Control все файлы представлены в виде объектв ShellItem. Чтобы получить объект этого типа для перетягиваемого элемента, просто обращяемся к нему по индексу. Индекс перетягиваемого элемента это item.Index (а если в полном виде то ((ListViewItem)e.Item).Index), а массив объектов файлов находится в свойстве FileSystemItems.
Теперь создаем обработчик события DragEnter и DragOver для панели Panel control. Первый из них вызывается когда перетягиваемый объект и курсор входит в област панели, а второй, когда объект перетягивается над компонентом. Код для этих обработчиков будет следующим:
private void panel1_DragOver(object sender, DragEventArgs e)
{
if (e.Data == null)
{
e.Effect = DragDropEffects.None;
return;
}
else if (e.Data.GetDataPresent("heaparessential.HeaparFileSystem.ShellItem"))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void panel1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
Самым интересным тут является обработчик события DragOver, потому что в нем мы должны определить тип перетягиваемого объекта. Если это будет файл, то нужно разрешить бросание объекта. Если же это тянут другой объект, то нужно в e.Effect поместить DragDropEffects.None.
Последнее, что мы делаем, это создаем обработчик события DragDrop для панели Panel:
private void panel1_DragDrop(object sender, DragEventArgs e)
{
ShellItem shellitem =
(ShellItem)e.Data.GetData("heaparessential.HeaparFileSystem.ShellItem");
if (shellitem == null)
return;
else
label1.Text = shellitem.Path;
}
В первой строке получаем объект перетаскивание. Это то, что мы передали функции DoDragDrop, когда начинали перетягивание. Если результат не нулевой, то нам все удалось , и мы можем работать с объектом файла, в том числе и отображать его путь.
Исходный код примера включен в пакет компонента, который вы можете скачать здесь: .NET FileListView Control
[Прямая ссылка на этот пост Drag&Drop в.NET на примере FileListView]
Я некоторое время не выпускал никаких релизов и обновлений, потому что работал над новым компонентом для визуализации диаграммы Ганта. На последней работе, где я работал полный рабочий день, возникла необходимость использовать подобный компонент. Сначала мне поставили задачу найти возможные варианты покупки готовых решений на рынке. Оказалось, что хороших, а главное доступных решений просто не существует. Дешевые решения слишком просты и их можно реализовать за неделю, а более серьезные стоят по $3000.
Тратить деньги оказалось не выгодно, поэтому было принято решение написать собственную реализацию диаграммы. Мне поставили задачу сделать это на Delphi. Немного подумав, я решил реализовать диаграмму Ганта для платформы .NET. Именно этим я занимался последние дни. Сегодня я решил выложить первую бета версию компонента, который должен будет появиться в ближайшее время. Пока что это только бета вариант и его функционал далек от того, что будет в окончательной версии, но все же, он позволит вам представить, что будет в будущем.
Если вам где-то нужен подобный функционал, то можете оставить закладку на этот сайт, потому что компонент будет готов очень скоро. Цену я еще не определил, но для России она как всегда будет ниже, чтобы сделать компонент доступным. Скачать бета версию компонента можно здесь: Heapar .NET Gantt Control
[Прямая ссылка на этот пост Диаграмма Ганта для .NET]
Я сейчас читаю книгу Code Leader: Using People, Tools, and Processes to Build Successful Software. Автор Patrick Cauldwell - программист с очень большим стажем и разнообразным опытом. Он работал в различных компаниях, и это позволило ему увидеть мир ИТ с разных сторон. Да, смена работы – положительно сказывается на вашем опыте. Я вообще считаю, что на одном месте нужно сидеть от 3 до 5 лет. Меняя работу, вы окунаетесь в новый мир знаний, общаетесь с новыми людьми и получаете новый опыт в новой сфере.
Это небольшое отступление, а разговор сегодня пойдет о другом. Мы будем говорить о первой главе книги, которая называется Buy, Not Build (покупай, не строй). В ней Patrick пишет очень интересные вещи о том, что программисты должна разучиться писать код. Да, как бы нелепо это не звучало, в большинстве компаний программисты не должны писать код. Вы думаете, что вас нанимают на работу, чтобы вы писали код или создавали программы? Нет! Прежде всего программистов нанимают на работу для того, чтобы они решали проблемы компании с помощью программирования и создания программ. А нужно ли для этого писать собственный код? Не всегда это является обязательным решением.
В подтверждении этих слов, Patrick Cauldwell приводит очень интересный пример с банком. Допустим, что вы работаете в банке и в вашей программе нужен элемент управления типа календаря, чтобы пользователь мог выбирать дату подачи декларации. Допустим, что в используемой вами библиотеке нет нужного календаря? Нужно ли писать его? Если на рынке нет готового решения, то вам придется писать собственный календарь. Если же готовое решение есть и оно стоит дешевле, чем вы потратите времени на создания того же кода, то его следует купить, но не писать самостоятельно. В этом и заключается основная идея автора Buy, Not Build - покупай, а не строй сам.
Вам банк платит за то, чтобы вы решали проблемы банка, а не создавали календари. Да, написать собственный календарь – очень интересное занятие, но вам платят не за это. Если вы будете писать весь код самостоятельно, то разработка информационной системы банка окажется слишком дорогой и банк понесет убытки.
Если вам очень интересно написать собственный компонент, вы можете заниматься этим в свободное время, но не в рабочее. Если очень хочется поиграть с исходными кодами календаря, то можно купить такой элемент управления, который будет поставляться в исходных кодах. В этом случае, вы:
Этот список можно было бы продолжить, но уже понятно, что исходные коды очень важны в таком бизнесе, как компоненты. Именно поэтому, все элементы управления, которые разрабатывает Heapar Software, поставляются клиентам в исходных кодах. Это позволяет клиенту решить все перечисленные проблемы за минимальную цену.
Если есть возможность купить готовый строительный блок, и он оказывается дешевле собственной разработки, то этот блок следует купить. Позвольте компаниям-разработчикам компонентов решать ваши проблемы. Вот их программистам платят как раз за это и пусть они делают для вас строительные блоки. Если у вас есть идеи, то можете попытаться предложить их разработчику компонентов. Компания Heapar Software принимает любые предложения клиентов по улучшению собственных разработок, чтобы они лучше соответствовали надобностям клиентов. Пишите, и мы адаптируем наши разработки под ваши решения.
Если вы сможете решить проблемы работодателя в меньший срок и дешевле, то вы будете выглядеть в глазах заказчика или работодателя более профессиональным сотрудником и более ценным сотрудником. А если у вас из-за этого появится свободное время, то сможете потратить его на CS или World of Warсraft :)
А что же тогда нужно писать программисту? Ответить на этот вопрос очень легко – то, что приносит прибыль вашей компании и то, что позволяет победить ваших конкурентов и получить конкурентные преимущества. То, что вы разработаете календарь самостоятельно – не даст вам конкурентных преимуществ. А если вы купите календарь, а за сэкономленное время напишите прекрасный модуль управление счетом, проводками и переводами, то вы получите преимущество во времени разработки и в цене. Пишите только профильный код, который связан с вашей компанией, и по возможности покупайте то, что не связано со спецификой компании.
[Прямая ссылка на этот пост Покупайте компоненты, а не разрабатывайте]
Компонентное программирование как в .NET Framework очень удобно и позволяет быстро создавать готовые приложения из строительных кубиков (компонентов .NET). Иногда на форумах можно встретить замечания от матерых программистов о том, что кто-то только и раскладывает компоненты на форме. Видимо в этот момент нужно обидится и начать писать все самостоятельно? Зачем использовать визуальные возможности, которые упрощают программирование. Зачем использовать библиотеки, которые поставляются со средой программирования. Ну давайте тогда будем писать в машинных кодах! Это будет еще лучше и это будет чистый труд программиста без помощи разработчиков компиляторов.
Все программисты стремятся упростить свой труд и повысить производительность и в том, что кто-то использует компоненты сторонних разработчиков - нет ничего плохого. Лично я использую чужие разработки, даже тогда, когда я могу написать все то же самое самостоятельно. Почему же тогда я использую чужой код и компоненты? Потому что мое время стоит дороже. Вместо того, чтобы писать с нуля компонент и тратить на него месяц времени, я лучше куплю готовый компонент и буду его использовать. Я готов заплатить деньги, чтобы не тратить свое время.
Я не стесняюсь использовать чужие наработки и не стесняюсь покупать готовые решение. Это дешевле, если бы я писал сам и намного быстрее. Если я весь код для проектов буду писать самостоятельно, то на разработку программ будет уходить слишком много времени, а это моя зарплата и это лишние расходы. Когда я выбираю - писать код самостоятельно или покупать готовое решение, то я просто прикидываю в уме - сколько времени нужно, чтобы написать и отладить нужный код. Если нужен месяц, а компоненты стоят $100, то выгоднее купить компоненты, чем тратить целый месяц на написание стратегически ни на что не влияющего кода в моем бизнесе. Моя зарплата намного выше, чем $100, поэтому я лучше куплю нужный компонент и разработка программу станет намного дешевле.
Покупка чужого кода - общепринятая практика. Самый яркий пример такого подхода, доказывающий его прибыльность - Билл Гейтс. В свое время он принял решение не писать собственную ОС с нуля, а купить готовое решение, расширив его собственным компилятором Basic и добавив некоторые функции. Этот подход оказался дешевле и самое главное быстрее. Корпорация Microsoft смогла получить готовый продукт в минимальные сроки, продать его IBM и получить большую прибыль, которая позволила компании начать развиваться дальше по экспоненте.
В мире информационных технологий все развивается слишком быстро. Если вы не сможете предоставить готовый продукт одним из первых, то шансы на успех на рынке будут стремится к нулю, если только вы не являетесь владельцем Microsoft или Google. На быстроразвивающемся рынке нужно реагировать на рыночную обстановку мгновенно и предлагать готовые решения уже вчера. Не стесняйтесь использовать чужие компоненты и не бойтесь оказаться программистом, который строит приложения из кубиков. Хорошо зарабатывает тот, кто предоставляет готовый продукт, а не тот, кто бесконечно пишет все сам и никогда не успевает за рынком, чтобы предоставить готовый продукт.
Моя цель, как программиста Heapar Software помогать вам в решении ваших проблем, разрабатывать строительные блоки, на основе которых вы будете строить ваши успешные приложения для вашего бизнеса и для бизнеса ваших клиентов. Если у вы легальный пользователь наших компонентов, то в таких случаях мы даже рассматриваем варианты улучшения наших компонентов так, чтобы они лучше походили под ваш бизнес. Так как легальные пользователи получают полные исходные коды, вы можете использовать эти коды для того, чтобы самостоятельно расширять или подстраивать библиотеки под собственные нужды.
[Прямая ссылка на этот пост Использование сторонних разработок]
На этом блоге я буду рассказывать о продуктах Heapar Software и делиться мыслями о продуктах и библиотеке. Помимо этого, я планирую рассказывать о различных примерах использования компонентов из библиотек Heapar Software. У нас пока нет RSS ленты, на которую можно было бы подписаться, но в ближайшее время я постараюсь это исправить, чтобы вам не приходилось заглядывать каждый раз на сайт. А пока, я рекомендую подписаться на наши новости.
[Прямая ссылка на этот пост Добро пожаловать]