18-Авг-2010
Автор : Дмитрий Ляпин
Проблема.
Есть старое приложение, написанное на C++ Builder 5 и собранное на Windows XP. Все, что нужно о нем знать - в определенный момент программа показывает модальное окно с помощью функции ShowMessage(). Это простой и часто используемый прием вывода сообщения, например, об ошибке.

При запуске приложения на Windows Vista что-то пошло не так. В тот момент, когда должно было появится сообщение, основное окно стало заблокированным, но модального окна я не увидел. Единственный способ остановить программу - Alt+Ctr+Del.
Щелкаю правой кнопкой по exe-файлу, Свойства, Совместимость. Выбираю "Windows XP" и пробую запустить программу снова. На этот раз я увидел модальное окно, но лишь на полсекунды. Далее все то же самое - основное окно заблокировано, модального не видно.
Итак, проблема в том, что Vista показывает модальное окно некоторых старых программ за основным, таким образом, добраться до него и нажать-таки кнопку OK совершенно невозможно.
09-Апр-2010
Автор : Дмитрий Ляпин
Уверен, что каждому читателю приходилось в своих программах много раз выводить на экран (или куда-нибудь еще) количество чего-нибудь. Если вы это не делали, то, вероятно, вы никогда и не писали программы и читаете наш журнал случайно
Например: "Комментариев: 4", "Новых писем: 1", "Всего сотрудников: 19" и т.д.
Пользователь - существо, как правило, неприхотливое. Для пользователя программа - магия. И если она работает, то уже хорошо, главное - покажите куда нажимать.
Но если вы все же найдете свободную минутку, чтобы его порадовать, то почему бы не сделать так: "4 комментария", "1 новое письмо", "Всего 19 сотрудников" и т.д.
В английском языке все просто: "1 comment", "N comments" (N > 1). Богатство же Русского Языка не дает скучать хмурым программистам. Статья посвящена правильному выбору окончаний.
26-Мар-2010
Автор : Юрий Майоров
В предыдущей загадке было предложено написать код, который вычислял бы длину последовательности. На самом деле, эта задачка была взята не из головы, а с замечательного сайта http://projecteuler.net. Он посвящен решению математических задач на различных языках программирования. У каждого пользователя на сайте есть свой рейтинг, как и у каждого языка программирования(кстати, большинство задач решается например на c/c++, а большинство "решающих задачи" из США).
Про этот сайт я узнал из статьи Билла Вагнера. В ней он предлагает свой способ решения задачи.
25-Фев-2010
Автор : Дмитрий Ляпин

Для упаковки и распаковки ZIP архивов средствами Net Framework существует множество библиотек. Одна из наиболее популярных - ICSharpCode.SharpZipLib. Распространяется библиотека по лицензии GPL и в целом производит приятное впечатление.
Она позволяет работать с форматом ZIP на относительно низком уровне, исползуя классы ZipInputStream, ZipOutputStream, ZipEntry и др. А можно ограничиться функциями "запаковать директорию в архивчик" и "распаковать архивчик в директорию", это умеет класс FastZip.
Все настолько просто, что если бы у меня не возникло загадочных проблем с кириллицей в именах файлов, то не было бы и этой статьи про ZIP и C#.
02-Фев-2010
Автор : Георгий Могелашвили
Столкнулся я недавно с тем, что мне было поручено написать ASP.NET AJAX контрол сервеной стороны. Это такой контрол, который доступен при редактировании страницы ASP.NET в дизайнере, часть логики его находится на сервере, а часть на клиенте, взаимодействие происходит аяксово. Суть работы моего контрола - простой ComboBox, который получал бы данные динамически с сервера (предполагается, что данных так много, что загрузить их все разом не получится), а также фильтровал бы список на основании введенных символов. Это почти реализовано в AJAX Control Toolkit, только список там грузится целиком.
В интернете довольно много различных статей и блогов по теме создания своих контролов, однако, как ни странно, все они ограничиваются простенькими примерами, в которых напрочь отсутствует описание механизма взаимодействия клиента и сервера. Мне же надо было, чтобы в список на клиенте подтягивались данные из списка, который хранился на сервере (это может быть просто список, какой-либо ORM и вообще все, что бывает IEnumerable).
Здесь Вы не найдете мануала по созданию собственного контрола с нуля, благо по этой части документации хватает. Я же опишу, как сделать так, чтобы клиентская часть и ее серверная половинка могли свободно обмениваться информацией в асинхронном режиме.
11-Дек-2009
Автор : Дмитрий Ляпин
Часть 3. Пишем программу, которая даст ответ
Наконец, мы завершаем разработку программы, выясняющей, куда же делась память. Во второй части статьи были рассмотрены общие вопросы построения приложения и реализована логика решаемой задачи. Теперь самое время заняться графическим пользовательским интерфейсом. Это будет не что иное, как оконное приложение Windows Forms.
Мы рассмотрим следующие вопросы:
- как правильно расположить элементы управления на форме
- перерисовка окон и элементов управления
- необходимость выполнения трудоемких операций в отдельном потоке
- компонент BackgroundWorker
07-Дек-2009
Автор : Дмитрий Ляпин
Часть 2. Пишем программу, которая даст ответ
Вы начинающий программист, и хотите посмотреть, как профи пишут код? Эта статья для Вас! Вы сам большой дядька в очках с роговой оправой и изначально полны критики? Тогда эта статья тем более для Вас!
Настоящая статья состоит из трех частей. Первая описывает хорошую программу, которая дает ответ на вопрос, поставленный в заголовке. Вторая и третья части очень подробно объясняют исходный код.
Писать программу будем на C# в качестве оконного приложения. Перед погружением в разработку обозначим общие вопросы, решаемые на конкретном примере во второй части статьи:
- отделение логики решаемой задачи от графического пользовательского интерфейса
- конструирование класса в лучших традициях ООП
- обход дерева каталогов с помощью Net Framework
- использование механизма событий в языке C#
- оповещение о состоянии процесса обхода дерева каталогов без предварительной оценки (эвристический метод)
Погружаемся…