Блог Сергея Байдачного

Мой блог о технологиях

Archive for Сентябрь 2011

«Почему не работает гребаный border-radius» или Накипело.

4 комментария

 

Коллеги, хочу сразу отметить, что все примеры в своих статьях я пишу лично. Согласен, что выглядят они туповато, но вставлять кусок кода в статью, не проверив его… Картинки я также НЕ рисую в Paint.

К чему это я. Ах да, некоторое время назад писал пост о возможности работы с border-radius. Как ни странно, Internet Explorer 9 единственный браузер, который правильно работает с данными атрибутами. Если же говорить об IE 10, то мы обогнали всех. Достаточно посмотреть на результаты тестов: http://samples.msdn.microsoft.com/ietestcenter/. Как видно, основные конкуренты остались позади. Но я более чем уверен, что они догонят IE 10 в самое ближайшее время, а, следовательно, эра HTML 5 началась. И это очень здорово! Хотя и удивляет то, что конкуренты особо и не чухались, до появления поддержки HTML 5 в IE. Ведь декларация поддержки HTML 5 идет не первый год, а кроме video элемента толком ничего и не было.

Я опять отвлекся от темы. Так вот, прошло уже около года с момента публикации моего поста, а я до сих пор получаю гневные сообщения о том, что не работает border-radius в IE 9. Это конечно не так. Просто нужно быть внимательнее к тому коду, который Вы пишите. Если у меня что-то не получается, то я первым делом ругаю себя, а потом кого-то еще. Обычно нахожу ошибку именно у себя.

Что касается border-radius, то основная ошибка, которая тут возникает, это запуск страницы в режиме совместимости:

1). Проверьте, что страница декларирует использование HTML 5 с помощью элемента <DOCTYPE html>. В противном случае контент будет рассматриваться как HTML 4.x, а, следовательно, border-radius работать не будет;

2). Проверьте meta элементы на Вашей странице. Не переводят ли они браузер в режим совместимости? Возможно, Вы сами включили режим совместимости при тестировании других возможностей, нажав соответствующую кнопку возле строки-адреса страницы.

Иными словами, Internet Explorer позволяет отображать не только сайты, использующие все самые последние рекомендации, но и поддерживает ряд режимов совместимости, в которые можно принудительно переводить Ваши сайты, не модифицируя код.

Изучите предметную область, а потом делайте выводы.

А я начну писать статьи по HTML 5. Самое время.

Реклама

Written by Sergiy Baydachnyy

06.09.2011 at 17:50

Опубликовано в Internet Explorer 9

Tagged with

Введение в Silverlight 5 (часть 4)

leave a comment »

Перейдем к четвертой части (из семи) нашего рассказа о Silverlight 5. Рассмотрим улучшения при работе с текстом, печатью, а также возможность вызова нативных функций системы.

Работа с текстом

Silverlight 5 предлагает несколько интересных возможностей при работе с текстом.

Так, элементы управления Control, TextBlock и TextElement, имеют новое свойство CharacterSpacing. Это свойство позволяет установить расстояние между символами внутри текста.

Свойство LineHeight позволяет установить ширину строки (можно интерпретировать, как расстояние между строками) и определено в таких элементах как Block, TextBlock, TextBox и RichTextBox. Для элемента RichTextBox можно также задать стратегию с помощью свойства LineStackingStrategy. Ниже пример текста внутри элемента TextBlock с расстоянием между строками 30 и расстоянием между символами – 200:

 

image

 

Наконец, Silverlight 5 стал поддерживать два новых текстовых элемента, это RichTextBlock и RichTextBlockOverflow. Эти элементы аналогичны элементам RichTextBox и RichTextBoxOverflow, но позволяют отображать текст только на чтение.

Для тех, кто еще не познакомился с элементом RichTextBlockOverflow, рассмотрим небольшой пример:

 

   1:  <StackPanel x:Name="LayoutRoot" Background="White"
   2:     Orientation="Horizontal" VerticalAlignment="Top">
   3:     <RichTextBlock
   4:        Width="250" FontSize="16" OverflowContentTarget=
   5:        "{Binding ElementName=SecondBox}">
   6:        <Paragraph>
   7:           В лесу родилась елочка,
   8:        </Paragraph>
   9:        . . . . . . . . //повторить 20 разJ
  10:     </RichTextBlock>
  11:   
  12:     <RichTextBlockOverflow Width="250" Name="SecondBox">
  13:     </RichTextBlockOverflow>
  14:  </StackPanel>

 

Результат работы этого кода показан ниже:

 

image

 

Как видно, RichTextBlockOverflow может отображать текст, который не «вмещается» в основной элемент RichTextBlock. Благодаря таким элементам мы можем азмещать текст в 2, 3 и более колонках (или реализовывать более сложные сценарии).

Печать

Silverlight 5 позволяет теперь не только реализовать растровую, но и векторную печать. Для этих целей используется все тот же метод Print класса PrintDocument, который осуществляет попытку печати в векторном формате, а в случае неудачи (принтер не поддерживает), перейти к печати в растровом виде. Растровую печать можно инициировать с помощью нового метода PrintBitmap.

PInvoke

В документации эта возможность пока не описана, но я знал, что она уже реализована – возможность вызова методов Windows API из Silverlight приложений, обладающих повышенными полномочиями. Причем речь идет о приложениях, которые работают как в браузере, так и вне браузера. Поскольку вызов нативных функций в .NET обычно осуществляется с помощью атрибута DllImport, то я решил попробовать этот механизм и тут (запустив приложение с повышенными привилегиями):

 

   1:  public partial class MainPage : UserControl
   2:  {
   3:    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
   4:    public static extern int MessageBox(IntPtr hWnd, 
   5:      String text, String caption, uint type);
   6:   
   7:    public MainPage()
   8:    {
   9:     MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
  10:     InitializeComponent();
  11:    }
  12:  }

 

Удивительно то, что оно заработало. На экране, поверх браузера я увидел стандартный MessageBox. Пользуйтесь!

Written by Sergiy Baydachnyy

05.09.2011 at 18:10

Опубликовано в SilverLight

Tagged with

Введение в Silverlight 5 (часть 3)

leave a comment »

Продолжаем рассматривать новые возможности Silverlight 5, тем более, что вчера появился Release Candidate. Прежде чем перейти к 3D и связыванию с данными, рассмотрим массу небольших нововведений, которые могут сделать жизнь разработчика более приятной.

Установка имени файла по умолчанию в SaveFileDialog

Начнем сегодняшний обзор с улучшений в элементе управления SaveFileDialog. Теперь при вызове этого диалогового окна, можно установить имя файла (как и список расширений), которое будет отображаться по умолчанию, как имя файла, предлагаемого для записи. Вот как это выглядит:

SaveFileDialog dialog = new SaveFileDialog();

dialog.DefaultFileName = "hello.txt";

dialog.ShowDialog();

Кроме описанной возможности, появилось свойство InitialDirectory, позволяющее задать директорию, которая будет открыта в диалоге по умолчанию.

Улучшение работы с аудио

В Silverlight 5 стала доступна библиотека по работе с Media. Классы этой библиотеки представлены пространством имен Microsoft.Xna.Framework.Audio. Нетрудно догадаться, что данный шаг выполнен в рамках интеграции с XNA библиотеками, которые можно использовать и в Silverlight (это аудио и 3D).

Новое пространство имен содержит два основных класса, позволяющих создавать аудио эффекты в процессе работы Silverlight приложения. Файлы, доступные для проигрывания, должны быть в формате WAV и могут быть загружены с помощью класса SoundEffect. Конструктор этого класса получает ссылку на набор данных и(или) настройки аудио.

Создание конкретного экземпляра можно также выполнить с помощью статического метода FromStream, получающего ссылку на поток в качестве параметров.

Проигрывание эффекта осуществляется с помощью метода Play. Каких-то других методов SoundEffect не имеет, но это вовсе не означает, что отдельно взятым объектом нельзя управлять. Так, если Вы хотите не просто воспроизвести эффект, но и добавить элементы управления аудио (громкость, пауза и т .д.), то вместо метода Play следует вызывать метод CreateInstance, создающий конкретный экземпляр на базе SoundEffect, и возвращающий ссылку типа SoundEffectInstance, которая позволит управлять нашим аудио файлом.

SoundEffect sEffect=SoundEffect.FromStream(streamInfo.Stream);

sEffect.Play();

Изменение скорости проигрывания медиа

В Silverlight 5 произошли улучшения и в MediaElement элементе. Теперь этот элемент управления содержит такое свойство как PlaybackRate и событие RateChanged. Свойство позволяет задавать скорость проигрывания видео, а событие – реагировать на изменение свойства.

Нужно отметить, что при тестировании свойства у меня проявилась странная бага в дизайнере: при изменении свойства PlaybackRate через окно свойств, оно остается неизменным, показывая значение 1. При этом в XAML файле оно модифицируется, как и положено.

 

image

 

Возможно, это только моя проблема (какие версии я тут только не ставил), но будьте готовы к такому поведению.

Поддержка пульта дистанционного управления

Не было возможности проверить данную функциональность, так как пульт к Media Center у меня отсутствует (или к Xbox), но, теоретически Silverlight 5 поддерживает и работу с пультом. Данная функциональность стала доступна благодаря поддержке события MediaCommand, которое доступно у всех UIElement. Иными словами, если Вы хотите обрабатывать нажатия кнопок пульта, то Вам следует обработать это событие у родительского контейнера (от дочерних элементов оно как раз туда и свалится). Чтобы понять, какая кнопка на пульте была нажата, обработчик события получает доступ к свойству в MediaCommandEventArgs, содержащему свойство перечислимого типа MediaCommand. Последнее и содержит информацию по нажатой кнопке.

Written by Sergiy Baydachnyy

03.09.2011 at 08:40

Опубликовано в SilverLight

Tagged with

UNETA+ — всем сюда!

leave a comment »

Очень удивляет и радует конференция, организуемая сообществом .NET разработчиков в городе Харькове. Им удалось собрать неимоверное количество русскоязычных докладчиков со всего мира. При этом, сюда приедут как уже известные в Украине докладчики (например, Дмитрий Никонов), так и свежие силы в виде Вячеслава Красовского, Владимира Юнева и др.

Очень хорошо знаю, что на такие жесткие технические конференции кого-то из-за рубежа притащить очень тяжело (в отличие от конференций ни о чем, где люди сами себя пиарят). Ведь это те самые люди, которые разрабатывают Azure, SQL Server и расширения для Windows Phone и работы у них много. Их даже в Киев тяжело вывезти, имея связи в Майкрософт.

В общем, идти всем! Регистрация доступна тут http://uneta.ua/.

Written by Sergiy Baydachnyy

01.09.2011 at 08:56

Опубликовано в .NET Development, Microsoft

Tagged with