Сайт для программистов

воскресенье, 26 апреля 2009 г.

ToTitleCase

В .NET Framework есть такой интересный метод как ToTitleCase, когда в заданной строке все первые буквы слов становятся большими, а остальные - маленькими. В MSDN можно найти описание и пример использования этого метода. Прочитав, вы узнаете, что у метода есть одна особенность: если все буквы в слове большие, то с этим словом ничего не происходит. Например, это удобно, когда встречаются такие слова как СССР, МГУ, ЗАГС и т.п. Но тем не менее, иногда, хочется обойти это ограничение. Что для этого нужно сделать. Правильно, сначала перевести все слова в нижний регистр, а затем вызвать метод ToTitleCase.


Именно так поступил программист Jan Schreuder, написав функции-обертки для этого метода (блог http://bloggingabout.net/)



private string ToTitleCase(string text, System.Globalization.CultureInfo culture, bool forceCasing)
{
if (forceCasing)
{
return culture.TextInfo.ToTitleCase(text.ToLower());
}
return culture.TextInfo.ToTitleCase(text);
}

private string ToTitleCase(string text)
{
return ToTitleCase(text, System.Threading.Thread.CurrentThread.CurrentCulture, false);
}

private string ToTitleCase(string text, bool forceCasing)
{
return ToTitleCase(text, System.Threading.Thread.CurrentThread.CurrentCulture, forceCasing);
}

private string ToTitleCase(string text, System.Globalization.CultureInfo culture)
{
return ToTitleCase(text, culture, false);
}

//Вызываем какую-нибудь функцию
label1.Text = ToTitleCase(textBox1.Text, true);


Как видите, в нашем распоряжении четыре перегруженных версий функции. В стандартном случае достаточно вызвать функцию с одним параметром, которая содержит нужную строку. Для других случаев вызываются перегруженные версии.


Вот как будут выглядеть строки после вызова всех вариантов функций.



change this to title case => Change This To Title Case
chanGe This to TITLE case => Change This To TITLE Case
ChanGe This to TITLE case => Change This To TITLE Case
ChanGe This to TITLE case => Change This To Title Case

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

воскресенье, 5 апреля 2009 г.

Колокольчик для коровы

Некоторое время назад я начал переводить статью для раздела Windows Mobile, взятую с Codin4Fun. А недавно обнаружил, что эту статью также перевели на русском варианте Coding4Fun. Честно говоря, мне не очень понравился тот перевод, поэтому я все-таки решил выложить на своем сайте свой вариант перевода. Прочитать статью можно здесь.


Удачного вам программирования!

вторник, 24 марта 2009 г.

Проверь знания и выиграй призы

Перед Новым годом я предлагал вам поучаствовать в конкурсе на сайте ITquiz.ru. Те, кто принял мое приглашение, смогли выграть неплохие призы. Сам я также получил пивной бокал (см. предыдущие посты).


И вот запускается новая серия. Попробуйте свои силы. Для того, чтобы принять участие в новом конкурсе, перейдите по ссылке и зарегистрируйтесь (если у вас нет LiveID, OpenId).


Всем удачи!

понедельник, 23 марта 2009 г.

Моя книга в Библио-Глобусе

Совсем недавно в издетельстве Питер вышла моя книга Программирование для мобильных устройств под управлением Windows Mobile. Первое время она продавалась только в Петербурге, но недавно добралась и до прилавков московских магазинов. Несколько дней назад на сайте книжного магазина Библио-Глобус обнаружил, что у них тоже продается моя книга. Сегодня зашел в этот магазин и долго искал книгу на полках компьютерного отдела. Так и не нашел. Но, к счастью, магазин оборудован очень удобными терминалами с сенсорными дисплеями. Набираешь на экране название нужной книги и запускаешь поиск. Через несколько секунд система выдает тебе список найденных книг. При желании можно распечатать себе квитанцию с точным расположением книги. С удовольствием воспользовался этой услугой и уже через несколько секунд держал в руках свою книгу.
Кстати, завтра 24 марта в магазине проходит акция - всем покупателям с 18.00 до 22.00 предоставляется скидка 20% на любую книгу. Поэтому, если вы покупаете книги в книжных магазинах, то приезжайте завтра в Библио-Глобус. Можно сэкономить неплохую сумму при нынешних ценах на компьютерную литературу.
Приятного вам чтения!

воскресенье, 22 марта 2009 г.

ShellAbout

Сегодня познакомлю вас с простой функцией Windows API ShellAbout.



[DllImport("shell32.dll")]
static extern int ShellAbout(IntPtr hWnd, string szApp, string szOtherStuff, IntPtr hIcon);


ShellAbout выводит стандартное диалоговое окно Windows "О программе". Такое окно, например, вы можете увидеть при выборе меню О программе в Блокноте (notepad.exe). ЭТо окно можно использовать, когда у вас нет времени на разработку своего окна About.



Параметры



hwnd
Описатель родительского окна, вызывающего функцию

szApp
Выводит текст в заголовке диалогового окна и в первой строчке после слова "Microsoft". Если текст содержит разделитель (#), разделяющий текст на две части, то функция выводит первую часть в заголовке, а вторую после слова "Microsoft"

szOtherStuff
Выводит текст после информации о версии и копирайте

hIcon
Значок, выводимый в диалоговом окне. Если параметр равен NULL, функция показывает значок Microsoft Windows


Пример



ShellAbout(this.Handle, "Блокнотик", "Супер-программа Александра Климова", IntPtr.Zero);

Данная функция включена в справочник по функциям Windows API.

суббота, 28 февраля 2009 г.

Удаление файлов из корзины

В своей книге C#.Советы программистам я привел несколько примеров удаления файлов в системную Корзину. Если вы хотите удалить файлы из самой корзины, то воспользуйтесь функцией Windows API SHEmptyRecycleBin.
[C#]
[DllImport("shell32.dll")]
static extern int SHEmptyRecycleBin(IntPtr hWnd, string pszRootPath, uint dwFlags);
[Visual Basic]
Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (
ByVal hwnd As Integer,
ByVal pszRootPath As String,
ByVal dwFlags As Integer) As Integer


Теперь остается только вызвать функцию с нужными параметрами.
SHEmptyRecycleBin(IntPtr.Zero, "", SHERB_NOCONFIRMATION SHERB_NOSOUND);
Полное описание функции будет добавлено в справочник по функциям Windows API в среде .NET Framework.
Удачного вам программирования!

суббота, 14 февраля 2009 г.

Создание кружочков с цифрами без Photoshop

Сегодня в рассылке VB Helper Newsletter (http://www.vb-helper.com/) прочитал, как автор рассылки создавал специальные картинки для иллюстрации к своим книгам или статьям. Картинки представляют собой маленькие кружочки с цифрами внути. Подобные картинки обычно размещают для показа последоватьельности действий. Например, установите текст в текстовом поле (рис.1), нажмите на кнопку Далее (рис.2) и тому подобное. Безусловно, подобные вещи можно сделать в фотошопе и другом графическом редакторе. Но программисты не ищут легких путей. Гораздо интереснее самому генерировать картинки. Хотя, если серьезно, пример обладает определенным потенциалом для изучения техники работы с графикой, а также может послужить отправной точкой для создания других интересных вещей, например, генерирование лотерейных шаров с номерами.



Пример я портировал с Visual Basic на C#. Желающие ознакомиться с исходниками на VB, могут скачать пример с http://www.vb-helper.com/HowTo/howto_2005_make_number_icons.zip.



Привожу пример на C#. Одно маленькое замечание: в первоисточнике использовался цикл for для генерации десяти кружочков с цифрами от 0 до 9. Я ограничился одной цифрой 1.




const int WID = 24;



string base_path = @"e:\down\"; // ваш путь к папке



Font the_font = new Font("Arial", 10, FontStyle.Bold);



Bitmap bm = new Bitmap(WID,WID);



Graphics gr = Graphics.FromImage(bm);



gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

gr.Clear(Color.White);



Rectangle layout_rectangle = new Rectangle(0, 0, WID - 1, WID - 1);



using (LinearGradientBrush br = new LinearGradientBrush(layout_rectangle,

Color.White,Color.Blue,

LinearGradientMode.ForwardDiagonal))

{

gr.FillEllipse(br,layout_rectangle);

gr.DrawEllipse(Pens.Blue, layout_rectangle);

}



StringFormat string_format = new StringFormat();

string_format.LineAlignment = StringAlignment.Center;

string_format.Alignment = StringAlignment.Center;

gr.DrawString("1",the_font,Brushes.White,layout_rectangle,string_format);

bm.Save(base_path + "1" + ".bmp",System.Drawing.Imaging.ImageFormat.Bmp);



MessageBox.Show("Готово");




Кстати, сегодня День святого Валентина. Поздавляю всех романтичных котиков и кошечек )))