воскресенье, 31 августа 2008 г.

О перечислении Enum, стилях для HatchBrush и документации на MSDN

В своей книге C#. Советы программистам я привел несколько примеров для работы с перечислением Enum. Недавно для одного проекта мне понадобилось воспользоваться одним из описанных способов для перечисления всех стилей для кисти HatchBrush. Я написал следующее:

foreach (HatchStyle hatch_style in Enum.GetValues(typeof(HatchStyle)))
{
listBox1.Items.Add(hatch_style.ToString());
}

Когда я посмотрел на список, то увидел, что некоторые элементы списка повторяются. Например, стиль Horizontal повторяется два раза, а стиль LargeGrid - три раза. Сначала я подумал, что совершил ошибку в коде. Не найдя ошибки в этом примере, я решил прогуляться на сайт MSDN и посмотреть, что пишут про перечисление HatchStyle. Просматривая все значения стилей, я заметил, что стилю Min соответствует стиль Horizontal. Стало понятно, откуда взялось в моем списке два одинаковых стиля Horizontal. Обрадовшись, стал искать соответствия для трех значений LargeGrid. И тут я столкнулся с проблемой. В документации говорилось, что этому стилю соответствует сам LargeGrid и стиль Cross. А как же быть с третьим вариантом? Больше нигде не упоминалось о связи стилей с значением LargeGrid. Тут меня осенило. Взглянув еще раз на примеры из книги, я решил написать дополнительно еще несколько строчек кода, которые выводят имена стилей HatchBrush при помощи Enum.GetNames:

string[] hatchstyles = Enum.GetNames(typeof(HatchStyle));
foreach (string s in hatchstyles)
{
listBox2.Items.Add(s);
}

Расположив два списка рядом, сразу стало видно, что чему соответствует. Как уже говорилось выше, значению Horizontal соответствовали стили Horizontal и Min, а значению LargeGrid соответствовали стили Cross, LargeGrid, Max. Обратившись снова к документации, обнаружил, что стилю Max соответствует значение SolidDiamond. Удивившись, я решил просто вывести на форме три прямоугольника с разными стилями:

private void Form1_Paint(object sender, PaintEventArgs e)
{
HatchBrush hatchbrush = new HatchBrush(HatchStyle.Max, Color.Blue);
e.Graphics.FillRectangle(hatchbrush, 20, 20, 300, 100);

hatchbrush = new HatchBrush(HatchStyle.LargeGrid, Color.Blue);
e.Graphics.FillRectangle(hatchbrush, 20, 130, 300, 100);

hatchbrush = new HatchBrush(HatchStyle.SolidDiamond, Color.Blue);
e.Graphics.FillRectangle(hatchbrush, 20, 240, 300, 100);
}

Запустив пример, я убедился, что мой код для списков выдает правильные результаты. Если вы посмотрите на форму, то увидите, что первые два прямоугольника закрашены одинаковыми узорами (Max и LargeGrid), а третий прямоугольник закрашен совсем по другому. Таким образом, получается, что в документацию MSDN вкралась ошибка. Поэтому, когда вы обращаетесь к документации, старайтесь перепроверять написанное. Документацию пишут тоже живые люди, которые могут ошибаться.
А завтра начинается новый учебный год для школьников и студентов. Некоторые из них начнут или продолжат изучение программирования.
Счастливого вам программирования, девочки и мальчики!

воскресенье, 17 августа 2008 г.

Трудности перевода

Зайдите на www.Translate.ru и введите следующую фразу: my cat has given birth to four kittens, two yellow, one white and one black. Посмотрите, что у вас получится.
Для ленивых: переводчик выдает следующую фразу:
мой кот родил четырех котят, два желтых цвета, одно белое и одного афроамериканца.
Классно получилось. И политкорректно. Кстати, не стоит говорить, что черная кошка перебежала вам дорогу. Афроамериканка перебежала вам дорогу (а то еще засудят).

воскресенье, 10 августа 2008 г.

Поговорки и пословицы на C#

Недавно разбирал свои архивы и наткнулся на ссылку в Избранном. Ссылка вела на один из форумов RSDN, где предлагалось оформить любую поговорку или пословицу в виде кода на любом языке программирования. Естественно, меня больше заинтересовали варианты, написанные на C#.
Вот один из примеров (ГИББД посвящается)
if (!подмажешь)
{
поедешь = false;
}

Остальные примеры найдете на моей странице Занимательное программирование. Если у вас будет желание, то присылайте свои варианты на мою почту klimoff{собака}csfan.ru.
Могу предложить следующие фразы для упражнений:
Истина в вине
Не имей 100 рублей, а имей 100 друзей
Не тяни кота за хвост
Веселого вам программирования!

Функции для Aero Glass

Наверняка, вы слышали, что в Windows Vista имеется схема Aero Glass, поддерживающую полупрозрачность и стеклянный интерфейс. При помощи функций DwmIsCompositionEnabled и DwmEnableComposition можно управлять схемой Aero Glass. Сначала объявим эти функции
[DllImport("dwmapi.dll", PreserveSig = false)]public static extern bool DwmIsCompositionEnabled();

[DllImport("dwmapi.dll", PreserveSig = false)]public static extern void DwmEnableComposition(bool bEnable);

Теперь можно использовать их следующим образом:
// Если компновка рабочего стола доступна (включен Aero Glass)
if (DwmIsCompositionEnabled())
{
MessageBox.Show("Aero Glass включен");
}
else
{
MessageBox.Show("Aero Glass выключен");
}

// Отключаем компоновку рабочего стола (отключаем Aero Glass)
DwmEnableComposition(false);

Описания функций добавлены в Справочник по функциям Windows API для .NET Framework и будут доступны зарегистрированным пользователям в течение ближайших месяцев.
Удачного вам программирования!

суббота, 2 августа 2008 г.

Visual Basic 2005. Рецепты программирования

Недавно у меня был День Варенья. Решил к празднику купить себе какую-нибудь книжку по программированию. Остановил свой выбор на книжке Visual Basic 2005. Рецепты программирования. Книга по сути похожа на мою книгу C#. Советы программистам. Где-то наши советы пересекаются, но имеются и другие советы и темы, которые я не затрагивал. Книга очень толстая, советов много. Даются хорошие пояснения и комментарии. Наверняка, часть примеров я перепишу для C#. Если вы програмируете на Visual Basic, то рекомендую и вам приобрести эту книгу.
Удачного вам чтения!