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

воскресенье, 31 октября 2010 г.

ExtractAssociatedIcon

C помощью системной функции Windows API ExtractAssociatedIcon можно извлечь значок, ассоциированный с файлом. Значки возвращаются с размером 32х32.

[C#]
[DllImport("shell32.dll")]
static extern IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath,
out ushort lpiIcon);

или

[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);


Пример



// Отобразим значок какого-нибудь файла
// Добавим в проект элемент OpenFileDialog, кнопку и PictureBox

openFileDialog1.ShowDialog();

ushort uicon;
StringBuilder strB = new StringBuilder(openFileDialog1.FileName);
IntPtr handle = ExtractAssociatedIcon(this.Handle, strB, out uicon);
Icon ico = Icon.FromHandle(handle);

pictureBox1.Image = ico.ToBitmap();


Запустите проект и выберите любой файл на диске. На форме в PictureBox отобразится значок, который используется для выбранного файла (как это мы видим в Проводники).

Описание функции и ее параметров добавлено в справочник по функциям Windows API для .NET Framework.

К слову сказать, совсем не обязательно использовать неуправлямый код. В .NET Framework есть метод Icon.ExtractAssociatedIcon пространства имен System.Drawing, который делает ту же работу.



Добавьте в проект еще одну кнопку и напишите следующий код:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Icon icon = Icon.ExtractAssociatedIcon(openFileDialog1.FileName);
this.Icon = icon;
pictureBox1.Image = icon.ToBitmap();
}


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

суббота, 30 октября 2010 г.

Разлочка эмулятора Windows Phone 7

Эмулятор Windows Phone 7, который входит в состав Windows Phone Developer Tools, какой-то обрезанный. Непонятно, зачем Микрософт пошла на такой шаг. Доступен только Internet Explorer и собственные приложения, создаваемые в Visual Studio. К счастью, нашлись умельцы, которые сумели разлочить эмулятор, отредактировав его файл. Файл можно найти в интернете по слову WM70C1.en-US.unlocked. Я скачивал отсюда.
Скачайте файл и перенесите его в папку %programfiles%\Microsoft SDKs\Windows Phone\v7.0\Emulation\Images\. В этой папке вы найдет образ оригинального эмулятора (файл WM70C1.en-US.bin). Далее переименуйте оригинальный файл эмулятора и сохраните его на всякий случай. Теперь переименуйте ваш скачанный файл, чтобы он имел нужное имя. Запустите какой-нибуль проект на Visual Studio. Ваше приложение запустится в новом эмуляторе.
Закройте свое приложение и просмотрите новый вид разлоченного эмулятора. Небо и земля. Естественно, вы все делаете на свой страх и риск. Я никаких сбоев не заметил, все работает.

Скриншоты






Видео




Пользуйтесь на здоровье.

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

Изучайте XAML, WPF и Silverlight

В наше время происходит какой-то бум в языках программирования. Кажется, совсем недавно в ходу были C++, Visual Basic, Delphi, Java. Сейчас лидерами становятся совсем другие языки и технологии. И программистам очень трудно угнаться за этой гонкой.
Я сам в свое время очень долго не мог соскочить с Visual Basic 5.0 на Visual Basic 6.0, хотя, казалось, это всего лишь обновление номера версии. Но, я настолько привык к привычному окружению, что просто боялся все поломать. Спустя некоторое время уже сам удивлялся другим коллегам, которые не собирались переходить на VB 6.0, объясняя тем, что VB5.0 гораздо быстрее и занимает меньше места. А изменения не настолько существенны, чтобы обновляться.
Еще большим шоком стало появление .NET Framework со своей новой идеологией и полным отсутствием совместимости со старыми программами. Первые версии фреймворка благополучно пролетели мимо меня. Но Microsoft упорно гнула свою линию и убеждала переходить на новые языки. И я купил на Озоне Visual Basic.NET 2003. Но большу часть времени я все равно программировал на старом добром VB6.0.
В какой-то момент времени я вдруг понял, что пока не поздно, лучше начать изучение .NET Framework на C#. Сейчас я понимаю, что тогда я сделал правильный выбор. И, хотя, Microsoft пытается параллельно поддерживать все языки, большинство материлов в сети базируется именно на C#.
Но, успокаиваться было рано. Неожиданно на горизонте появилась новая технология XAML. Но, к тому времени я очень интенсивно изучал программирование для мобильной платформы Windows Mobile. Поэтому слова XAML, Silverlight, WPF были для меня пустым звуком, так как они не поддерживались мобильными телефонами. К сожалению, это был мой стратегический просчет. Технология XAML окрепла и стала завоевывать сердца разработчиков. Я пытался оттянуть тот момент, когда придется изучать XAML, жизнь внесла свои коррективы.
Когда Microsoft в очередной раз поменяла правила игры и объявила, что следующая платформа Windows Phone 7 будет базироваться на Silverlight, я понял, что мне придется снова переучиваться.
И чем больше я погружаюсь в этот неведомый мир, тем больше он мне нравится. Знаю, что многие программисты находятся в похожем состоянии и еще не приняли решения о переходе на новые технологии. На мой взгляд, на сегодняшний день в сети или в магазинах нет хороших материалов для начинающих, которые бы с самых азов объяснили возможности XAML. Как правило, все учебные материалы уже предполагают базовое знакомство с языком C# и имеют высокий порог вхождения.
Но, на самом деле, язык XAML очень прост и элегантен. Сейчас я попытаюсь очень популярно объяснить, как пишется код на XAML, чтобы даже самые отъявленные новички поняли суть материала.
Если у вас есть опыт работы с HTML, то вам будут понятны основные понятия. По-существу, XAML - это язык разметки, как и HTML. (Обязательно найдется зануда, который скажет, что это язык разметки XML). Код состоит из тегов: начальный, конечный, или укороченный вариант самозакрывающего тега.
Предположим, нам для работы нужна кнопка. Достаточно написать следующее

<Button Foreground="LightSeaGreen" FontSize="24pt" Width="200" Height="50">
Привет, XAML
</Button>

Как видите, все очень просто. Есть тег Button с параметрами цвета, шрифта, размеров. Также обстоят дела и с другими элементами. Нужно только запомнить, что существует самый главный единственный корневой тег (в HTML таким тегом можно считать <html>), внутри которого находятся дочерние элементы. Таким образом выстраивается целое дерево родительских и дочерних элементов.
Обратите внимание, что код XAML можно написать даже в Блокноте и запустить из Проводника. Более подробно я описал этот материал в статье Что такое XAML.
Рекомендую первое время писать код вручную, хотя в Visual Studio 2010 появился свой GUI-редактор, позволяющий визуально размещать элементы, как это делалось в Windows Forms.
Когда вы наберетесь небольшого опыта, вы заметите, что некоторые вещи делать гораздо проще в WPF и Silverlight, которые тесно завязаны на XAML (но это не одно и то же).
Даже, если вам еще не приходилось работать с WPF, все равно прочитайте другую мою статью Закругляем углы и отбрасываем тень. Код настолько простой и понятный, что вы удивитесь, как легко создать различные эффекты отбрасывающей тени или закругления уголков. Причем, возможности XAML гораздо выше. Наверняка, вы слышали, что Silverlight считают конкурентом Flash. Так вот, XAML обладает широким арсеналом анимационных эффектов и других рюшечек.
Просматривая свои старые проекты, написанные традиционным способом на WinForms, я все чаше испытываю соблазн переписать их на WPF. И, хотя я не волшебник, а только учусь, но XAML теперь стоит у меня на первом месте в плане изучения.
Присоединяйтесь!

воскресенье, 6 июня 2010 г.

ShowThumbnailsOnNavigation

Хочу поделиться с вами одним трюком, который был описан в одном блоге MSDN.

В IDE-редакторе Visual Studio 2010 при нажатии Ctrl+Tab вы можете перемещаться между открытыми активными файлами. Менеджер окон выглядит следующим образом.



При помощи небольшого трюка можно добавить в это окно эскизы файлов. Откройте редактор реестра и в разделе HKCU\Software\Microsoft\VisualStudio\10.0\General добавьте параметр DWORD ShowThumbnailsOnNavigation со значением 1. Перезапустите Visual Studio и вы увидите, что теперь появились эскизы.



Интересно отметить, что данные эскизы были доступны в Visual Studio 2008 и Visual Studio 2010beta, но затем эту функциональность убрали.

Примечание: большой сборник настроек реестра Windows вы можете найти в справочнике по реестру Windows.

понедельник, 3 мая 2010 г.

Windows Phone Developer Tools CTP

На прошлой неделе на нашей улице наступил праздник и имя ему Апрельский фрэш Windows Phone Developer Tools CTP April Refresh. Объясню, почему праздник. Когда вышла финальная версия Visual Studio 2010, я снес предыдущую Visual Studio 2008 и остался у разбитого корыта. В новой версии напрочь отсутствует поддержка Windows Mobile 6 и я теперь не могу поддерживать свои старые проекты. А бету-версия Windows Phone Developer Tools нельзя было ставить на финальный релиз VS2010.
Я плевался и ругался, потому что так нельзя работать. Все пошло коту под хвост. К счастью, ребята из Microsoft подсуетились и выпустили в свет упомянутый выше пакет разработки под Windows Phone.
В состав пакета входит Visual Studio 2010 Express for Windows Phone и эмулятор. Если у вас уже стояла профессиональная версия VS2010, то у вас также появятся новые шаблоны для проектов под Windows Phone.
Теперь можно более предметно изучать примеры под новую платформу. Несмотря на то, что теперь нет никакой совместимости со старым .NET Compact Framework, я не сильно переживаю по этому поводу. Как известно, теперь требуется программировать под Silverlight и XNA. Давно собирался вплотную заняться изучением этих технологий, но стимула не было. Теперь такой стимул появился.
Сама технология интенсивно развивается, и, наверняка, много к концу года поменяется. Тем не менее можно уже сейчас создавать интересные примеры. Кстати, если вы не боитесь экспериментов, то можете разлочить эмулятор, чтобы увидеть скрытые возможности. Подробнее можете почитать на Хабре (http://habrahabr.ru/blogs/mobiledev/92600/).
А для новичков я собираюсь подготовить учебный курс, который будет располагаться по адресу http://developer.alexanderklimov.ru/winmobile/wp7/wp7-tutorial.php
Не обещаю, что наполнение курса новыми материалами будет идти быстрыми темами, но одну-две статьи в неделю, я надеюсь, разместить смогу.
Присоединяйтесь!

воскресенье, 14 марта 2010 г.

Small Basic

Некоторое время назад я установил на свой компьютер программу Small Basic версии 0.7. Сама программа предназначена для совсем юных программеров, которые хотели бы приобщиться к программированию. Программа получилась очень красивая и легкая и похожа на забаву. В Small Basic всего 15 (!) ключевых слов, но энтузиасты уже написали на этом языке тетрис, пинг-понг, удав и многое другое.
Small Basic базируется на .NET Framework и полученные знания не пропадут впустую - можно затем перейти на Visual Basic или C#.
Кроме того, программа позволяет создавать исполняемые файлы - достаточно сохранить исходники программы на диске и при следующем запуске программы в Small Basic в папке рядом с файлом-исходником *.SB появится EXE-файл.
Также можно написать расширение для Small Basic на любом языке .NET Framework, например, C#.
Особенно, мне понравился встроенный объект черепашка (Turtle). С ее помощью можно вычерчивать различные красивые узоры, используя команды поворота.
Приятно отметить, что Small Basic локализован для многих стран, в том числе и для России. Если у вас в первых раз загрузилась неправильная версия (например, у меня почему-то загрузилась французская версия), то зайдите в Пуск/Все программы/Small Basic/Localized и выберите свою версию.
Я немного поигрался с этой программой и забросил ее. Но сегодня узнал интересную новость - появилась новая версия 0.8, в которой появилась интересная функциональность - теперь вы можете размещать свои программы в интернете в виде Silverlight-приложения. Все, что вам нужно сделать - это нажать на кнопку Опубликовать. Копия вашей программы будет загружена на сайт smallbasic.com и ей будет присвоен идентификатор. Также вам дадут ссылку на программу, и вы можете похвастаться перед своими знакомыми своей гениальной программой. Более того, на странице программы вы можете скопировать код для использования его в блогах. Попробую это сделать в этом посте, но возможно, в Blogger.com пока это будет недоступно, поэтому я сделаю копию на своей странице (см.дальше). Я скопировал один из примеров документации и добавил одну строчку кода, которая раскрашивает круги, которые наматывает черепашка.
Я решил поглубше изучить эту среду разработки и завел для себя специальную страничку по адресу http://developer.alexanderklimov.ru/smallbasic/smallbasic.php Пока не буду афишировать эту страницу на своем сайте, но если среди читателей блога будет интерес к этому продукту, то сделаю страницу доступной для публики.
Удачного вам программирования!








воскресенье, 28 февраля 2010 г.

Windows Mobile 6.5.3 DTK

Совсем Microsoft недавно представила в Барселоне новую платформу Windows Phone 7 Series, которая привлекла к себе внимание специалистов и простых пользователей. На фоне этого ажиотажа, как-то незаметно прошла новость о выходе новой версии Windows Mobile 6.5.3 DTK. А ведь там тоже есть несколько интересных новинок, которые уже доступны для разбработчиков Windows Mobile. Дальнейшие описания действительны для Visual Studio 2008 (для Visual Studio 2005 есть небольшие отличия).

Сначала несколько общих слов. В новом релизе Windows Mobile 6.5.3 DTK было добавлена новая документация, новые примеры, заголовки файлов и библиотеки и утилиты. А также добавлены новые образы эмуляторов под Windows Mobile 6.5.3. Не забывайте, что Windows Mobile 6.5.3 DTK необходимо устанавливать после установки Windows Mobile 6 SDK Refresh. При установке DTK ничего из состава SDK не удаляется и вы можете спокойно разрабатывать приложения как для Windows Mobile 6, так и для Windows Mobile 6.5.

Документация

Как и прежде, вся необходимая документация доступна на сайте MSDN. Но, с установкой Windows Mobile 6.5.3 DTK, вы получаете доступ к документации по Windows Mobile в виде локальной отдельной версии справки (Пуск Все программы Windows Mobile 6.5.3 DTK Documentation Windows Mobile 6.5.3 DTK Help). Это достаточно удобное решение, если у вас нет соединения с интернетом.

Пример Mobile Mapping Framework

В пакет Windows Mobile 6.5.3 DTK был добавлен новый пример, использующий Mobile Mapping Framework (папка ...\Samples\Common\CS\MMF). Что это такое и с чем его едят, я, честно говоря, не знаю. Если кто-то владеет информацией, то поделитесь, плиз.

Новый тип проекта - Widgets for Window Mobile

В Visual Studio 2008 появился новый тип проекта - Widgets for Window Mobile, позволяющий быстро создавать виджеты для Windows Mobile 6.5. О нем чуть ниже.

Образы эмуляторов

Вкусная новость - в состав Windows Mobile 6.5.3 DTK входят несколько новых эмуляторов для Windows Mobile 6.5.3. Я перечислю образы только для профессиональной версии (серия Standard мне не интересна, да и в продаже практически их нет):

  • Windows Mobile 6.5.3 Professional Emulator
  • Windows Mobile 6.5.3 Professional Square QVGA Emulator
  • Windows Mobile 6.5.3 Professional Square VGA Emulator
  • Windows Mobile 6.5.3 Professional VGA Emulator
  • Windows Mobile 6.5.3 Professional WQVGA Emulator
  • Windows Mobile 6.5.3 Professional WVGA Emulator

Новые сертификаты

Также были добавлены новые сертификаты, которые заменяют устаревшие сертификаты, у который сроки истекли в 2009 году. Новые сертификаты будут действительны до 2015 года и доступны в папке ...\Tools\Security\SDK Development Certificates. Так как я не пользуюсь сертификатами, то мне от этого ни горячо, ни холодно.

Новая утилита xHopper

Опытные разработчики знают о программе Hopper, помогающей тестировать приложения в стрессовых ситуациях. Теперь появилась еще одна утилита xHopper. По описанию, новой утилитой пользоваться стало еще удобнее. В ближайшее время я планирую изучить работу утилиты. Также вы можете найти дополнительную информацию о xHopper в документации к Windows Mobile 6.5.3 DTK, о которой говорилось выше.

Новый вид Windows Mobile 6.5.3

Посмотрим, что изменилось в Windows Mobile 6.5.3 по сравнению с Windows Mobile 6.5. Сразу хочу предупредить, что запустить отладку своей программы в Windows Mobile 6.5.3 не получится - в окне выбора эмуляторов при запуске отладки программы нужных версий эмуляторов вы не увидите. Поэтому, чтобы увидеть новую платформу, необходимо запустить менеджер эмуляторов (Tools Device Emulator Manager...) и в диалоговом окне выбрать нужный эмулятор.

Например, выберем Windows Mobile 6.5.3 Professional VGA Emulator (Actions Connect). Чтобы было легче сравнивать, запустим также эмулятор Windows Mobile 6.5 Professional VGA Emulator.

Первое, что бросается в глаза - кнопка Пуск стала большой и круглой и находится в нижней части экрана, как на десктопных Windows и напоминает кнопку Пуск в Windows 7, только в черно-белом варианте. Соответственно, и панель задач тоже находится внизу. Если вы запустите какую-нибудь программу, то увидите, что кнопка закрытия (крестик Х) тоже стала большой и круглой. Эти изменения очень удобны для пользователя, которому теперь проще дотянуться пальцами одной руки до часто используемых кнопок. Также я заметил, что в Windows Mobile 6.5.3 исчезла игра Bubble Breaker. Могу только предположить, что игра расчитана на использование пера, а это теперь считается дурным тоном (к сожалению).




Разработка виджетов

Теперь поговорим о разработке виджетов в Windows Mobile 6.5.3. Я уже затрагивал эту тему на своем сайте (http://developer.alexanderklimov.ru/winmobile/widget.php), а также на страницах Хакера. Тогда речь шла о ручном создании виджетов в текстовом редакторе. Теперь можно заниматься разработкой в привычной среде Visual Studio. После установки Windows Mobile 6.5.3 DTK в шаблонах проектов появится новый тип проекта - Widgets for Window Mobile. Я не сразу нашел этот тип на своем компьютере. По привычке я искал новый тип в разделе Smart Device, но там ничего нового не было. Сначала подумал, что DTK криво встала и хотел уже переставлять все заново. Но, к счастью, я вовремя заметил, что новый тип проекта находится в корневом разделе. Не повторяйте моих ошибок. Для примера я выбрал шаблон SimpleWidget, который содержит все необходимые файлы для создания простого виджета.


Когда проект загрузился в Visual Studio, то стало видно, что проект содержит значок в формате PNG, веб-страницу, конфигурационный файл XML, а также папки с сценариями JavaScript и стилями CSS.

Я стал щелкать по всем файлам, чтобы просмотреть их содержимое. И тут меня ждал приятный сюрприз - когда я щелкнул на файле config.xml, то открылось окно редактора Manifest Editor. Заполнить все поля в таком редакторе - дело нескольких секунд. Впрочем, вы можете выбрать из контекстного меню файла пункт View Source и вручную прописать все необходимые данные.


Второй сюрприз меня ждал, когда я решил запустить проект. Нажав на зеленый треугольник, я ожидал увидеть запуск стандартного эмулятора. Как бы не так! У меня запустился Internet Explorer с встроенным Widget Debugger for Windows Mobile 6.5.

В окне дебаггера можно поиграться с некоторыми настройками.

И, напоследок, даю бесплатный совет. Когда я попытался в сценарии JavaScript добавить для кнопок меню и сообщений слова на русском, то на выходе получил кракозябры. К моему удивлению, файл сценария хранился в ANSI-кодировке. Инструментов для настройки кодировки я не нашел, поэтому я просто открыл JS-файл в блокноте и пересохранил его в UTF-8. Visual Studio заметил, что файл был изменен во внешнем редакторе и спросил, нужно ли его открыть заново (да, нужно). После этого русские символы стали отображаться корректно.

Таким образом, используя новинки, пришедшие к нам с Windows Mobile 6.5.3 DTK, мы можем создавать и тестировать приложения для Windows Mobile 6.5.3. А также мы ждем новостей, как будет происходить разработка приложениий для Windows Phone 7 Series. Ждать осталось недолго.

вторник, 9 февраля 2010 г.

Получить информацию о BMP-файле

Если вам приходится работать с графическими файлами, то, возможно, у вас появится задача получить дополнительную информацию - узнать размеры файла, глубину цвета и т.п. Безусловно, вы можете загрузить картинку из файла на форму или подходящий элемент управления (PictureBox) и получить требуемую информацию. Но, предположим, ваш проект предназначен только для сбора информации о файлах. В этом случае загружать 10-мегапиксельный рисунок в форму неоправданно - получается слишком большой расход памяти. Есть другой способ получения нужной информации. О нем и пойдет речь сегодня.

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

Но, вернемся к файлам BMP. В начале каждого файла в формате BMP идет так называемый заголовок файла. В документации он описывается структурой BITMAPFILEHEADER, которая имеет общую длину 14 байтов: три UInt16 и два UInt32. Нас не интересует данный заголовок, поэтому вы его должны просто проигнорировать. Таким образом в коде нам нужно открыть файл и пропустить 14 байт:

reader.ReadBytes(14);

Обратите внимание, что функцию sizeof в данном случае использовать нельзя. Функция sizeof работает только с неуправляемыми ресурсами. После структуры BITMAPFILEHEADER идет структура BITMAPINFOHEADER. Именно, в этой структуре хранится необходимая информация, которую необходимо извлечь (кстати, описание структуры можно найти в справочнике по функциям Windows API для Visual Basic). Вот как будет выглядеть код извлечения информации из файла:

private void ShowBMPInfo(String file)
{
FileStream fs = new FileStream(file, FileMode.Open);
BinaryReader reader = new BinaryReader(fs);

// Пропускаем заголовок файла (14 байтов)
reader.ReadBytes(14);

// Пропускаем размер структуры BITMAPINFOHEADER
reader.ReadUInt32();

// Получаем ширину и высоту
int width = reader.ReadInt32();
int height = reader.ReadInt32();

// опять пропускаем часть байтов
reader.ReadInt16();

// Получаем глубину цвета (битов на пиксел)
Int16 bitsPerPixel = reader.ReadInt16();

// Освобождаем ресурсы
reader.Close();
fs.Close();

// Выводим информацию
MessageBox.Show(width + " x " + height + " x " + bitsPerPixel);
}

private void button1_Click(object sender, EventArgs e)
{
ShowBMPInfo(textBox1.Text); // подставляем путь к файлу
}

Тут есть одна тонкость. Пропускаемые в коде байты на самом деле все равно считываются. Чтобы действительно перепрыгнуть через заданное число байтов, вы должны использовать методы и свойства объекта потока (stream object). Например, получить текущий поток через свойство BaseStream и пропустить первые 14 байтов можно так:


reader.BaseStream.Seek(14, SeekOrigin.Begin);

Кроме того, можно передвинуть внутренний указатель на заданное смещение от конца потока или от текущей позиции. Вот как пропустить короткое целое (2 байта):


reader.BaseStream.Seek(2, SeekOrigin.Current);

С учетом этих особенностей я написал второй вариант извлечения данных из файла.


private void ShowBMPInfo2(String file)
{
FileStream fs = new FileStream(file, FileMode.Open);
BinaryReader reader = new BinaryReader(fs);

// Пропускаем заголовок файла (14 байтов) без считывания
reader.BaseStream.Seek(14, SeekOrigin.Begin);

// Пропускаем размер структуры без считывания
reader.BaseStream.Seek(4, SeekOrigin.Current);

// Получаем ширину и высоту
int width = reader.ReadInt32();
int height = reader.ReadInt32();

// Пропускаем
reader.ReadInt16();

// Получаем глубину цвета (битов на пиксел)
Int16 bitsPerPixel = reader.ReadInt16();

reader.Close();
fs.Close();

// Выводим информацию
MessageBox.Show(width + " x " + height + " x " + bitsPerPixel * planes);
}

private void button2_Click(object sender, EventArgs e)
{
ShowBMPInfo2(textBox1.Text);
}

Толчком к написаню данного топика послужила статья из журнала MSDN за август 2002 года. Там же вы можете найти код для Visual Basic.NET.

Данный совет также будет помещен в раздел Графика на моем сайте.

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

воскресенье, 31 января 2010 г.

Установка шкурок (skin) к эмулятору в Visual Studio для коммуникаторов Samsung

На Новый год я купил себе новый телефон Samsung GT-i8000 Omnia 2 с Windows Mobile 6.5 и экраном 800х480 на борту. Естественно, разрабатывая программы для своего мобильника в Visual Studio, хочется видеть, как будет выглядеть программа не в абстрактном эмуляторе, а в своем телефоне. К счастью, разработчики из компании Samsung Mobile сделали собственные шкурки для моделей GT-B7300 Omnia Lite, GT-B7330 Omnia Pro, GT-B7620 Armani, GT-i8000 Omnia 2, SPH-i350 Intrepid. Вы можете скачать файлы шкурок и внедрить их в Visual Studio. Я расскажу, как это делается на одном примере для своей модели GT-i8000.

Следует предупредить вас о некоторых особенностях шкурок:

  • Установленные шкурки от Samsung не изменяют функциональность эмулятора Microsoft. То есть, он будет работать как прежде, и никаких новых предустановленных программ, идущих в комплекте к телефонам Samsung, вы не увидите.
  • Некоторые кнопки на устройстве в эмуляторе могут работать некорректно. Поэтому рекомендуется нажимать на эти кнопки не в эмуляторе мышкой, а через обычную настольную клавиатуру.
  • Собственные кнопки устройств от Samsung, такие как кнопка камеры, в эмуляторе не поддерживаются.
  • Размеры самого устройства в эмуляторе нельзя изменять. Некоторые модели настолько большие, что могут не помещаться полностью на экране вашего монитора. Попробуйте увеличить разрешение вашего монитора.

Системные требования

Чтобы использовать эмуляторы для Samsung-телефонов, необходимо иметь Windows 7, Visual Studio 2008 Professional (и выше), Windows Mobile 6 SDK Refresh и Windows Mobile 6.5 Developer Tool Kit.

Установка

Дальше пошагово расскажу процесс установки шкурки.

  1. Скачиваем пакет эмуляторов (около 6 мб), в котором содержатся все вышеперечисленные эмуляторы телефонов. Сами шкурки для эмуляторов состоят из нескольких файлов XML и PNG. В файле XML содержится информация о размерах экрана, раскладке клавиатуры и другие конфигурационные данные. Картинки в формате PNG содержат изображения самого телефона в различных состояниях.
  2. Распаковываем файл DeviceSkins.zip и копируем файлы в удобное для вас место. По умолчанию, стандартные шкурки телефонов хранятся в папке C:\Program Files\Windows Mobile 6 SDK\PocketPC\DeviceemulationV650 или C:\Program
    Files\Windows Mobile 6 SDK\Smartphone\DeviceemulationV650. Но вы можете выбрать свою папку, например, на диске D:\.
  3. Запускаем Visual Studio и открываем меню Tools Options. В диалоговом окне Options открываем раздел Device Tools Devices. В списке Devices выбираем подходящую модель для нашего телефоноа. В моем случае мне подходит модель USA Windows Mobile 6.5 Professional WVGA. Для модели GT-B7330 Omnia Pro следует выбрать USA Windows Mobile 6.5 Standard Square Emulator.

  4. Выделив нужную модель, щелкните на кнопке Save As и введите имя для сохраняемой модели, например, Samsung GT-i8000 Omnia 2.

  5. После сохранения в списке появится ваш телефон. Выделите его и нажмите на кнопку Properties. У вас откроется новое диалоговое окно.


  6. Щелкните на кнопке Emulator Options, чтобы открыть еще одно диалоговое окно.
  7. Перейдите на вкладку Display и для переключателя Skin укажите местоположение XML-файла, который хранится в папке шкурок вашего телефона. Щелкните кнопку OK.


  8. Возвращаемся к диалоговому окну Options и выбираем раздел Device Tools Form Factors.
  9. В списке Form factors выбираем опять подходящую модель эмулятора, как мы это уже делали несколько шагов назад и сохраняем через кнопку Save As под тем же именем, под которым вы собираетесь работать.

  10. Выбираем свой телефон в списке и щелкаем на кнопке Properties.
  11. Снова указывем местоположение XML-файла, в котором содержится информация о шкурке.

Для моделей Omnia II, Omnia Lite, and Armani необходимо временно снять флажок Show skin, ввести новые значения ширины и высоты экрана устройств (480x800 для Omnia II and Armani; 240x400 для Omnia Lite) и установить обратно флажок Show skin. Нажмите кнопку OK, чтобы закрыть окно.



Совет: Если вы собираетесь постоянно работать с эмулятором Samsung, то можете в окне настроек выбрать из списка Default form factor свою модель. В этом случае во время разработки программ в дизайнере форм у вас будет выводиться изображение вашего телефона (об этом чуть позже).

Если у вас возникнет задача удаления установленного эмулятора, то достаточно снова вызвать окно настроек Options, выбрать нужную модель и нажать на кнопку Delete.

Использование шкурки в Device Emulator

С настройками закончено. Теперь мы можем использовать шкурки в эмуляторе при отладке собственных программ. У вас есть два варианта - залить программу на стандартный Device Emulator или запустить эмулятор через Device Emulator Manager. Рассмотрим первый вариант:


  1. Выберите меню Debug Start Debugging.

  2. Выберите из списка нужный вам телефон и щелкните кнопку Deploy.


Ваша программа запустится в эмуляторе Samsung. Так как даже на моем 22-дюймовом мониторе не помещается полностью эмулятор, я развернул его в горизонтальное положение.



Использование шкурки во время разработки

Вы можете использовать внешний вид телефона не только во время запуска программы, но и во время разработки в дизайнере форм. Когда мы устанавливали шкурку, то уже сделали необходимые настройки (настройка Form Factors). Поэтому вам достаточно открыть дизайнер форм, щелкнуть правой кнопкой мыши на самой форме и выбрать пункт Properties. В окне свойств найдите параметр FormFactor и выберите нужный пункт. В данном случае я опять развернул устройство на 90 градусов, чтобы показать, как выглядит устройство в дизайнере форм.



Как видите, после несложной настройки, у вас появилась возможность увидеть свой телефон в Visual Studio. Следующим шагом будет использование SDK от Samsung, чтобы использовать возможности устройства в своих программах, например, акселерометр. Чем я и собираюсь заняться в ближайшее время.