Окна произвольной формы на C#

30 дек. 2009 г. | | |

Недавно наткнулась на свою программку, которая создает окно произвольной формы. Написана она была на C#, код довольно простой. Логически код можно разделить на две части - одна отрисовывает форму произвольной формы, заданной bmp-файлом, другая занимается отслеживанием перемещений формы. На самой форме нет ничего, FormBorderStyle установлен в None.
Принцип работы этого кода прост. Методу CreateFromBMP() в качестве аргументов передается bmp-русинок, в котором содержится желаемая форма для окна, и цвет, который надо из рисунка исключить, чтобы получить контур. Для примера использовался рисунок машинки, созданный в mspaint :)

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.BackgroundImage = global::Window.Properties.Resources.bg;
this.Region = CreateFromBMP(global::Window.Properties.Resources.bg, Color.FromArgb(255, 255, 255));
}

#region Create Form Border From BMP

Region CreateFromBMP(Bitmap bg, Color excludeColor)
{
GraphicsPath path = new GraphicsPath();

int width = bg.Width;
int height = bg.Height;

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
if (bg.GetPixel(x, y) != excludeColor)
{
path.AddRectangle(new Rectangle(x, y, 1, 1));
}
}
}

return (new Region(path));
}
#endregion

#region Moving form
private bool toMove = false;
private Point delta = new Point();

private void start_MouseMove(object sender, MouseEventArgs e)
{
if (toMove)
{
Point coords = this.PointToScreen(e.Location);

Point location = new Point(this.Location.X + (coords.X - delta.X), this.Location.Y + (coords.Y - delta.Y));

this.Location = location;

delta = coords;
}
}

private void start_MouseDown(object sender, MouseEventArgs e)
{
if ((e.Button == MouseButtons.Left) && (e.Clicks == 1))
{
toMove = true;
delta = this.PointToScreen(e.Location);
}
}

private void start_MouseUp(object sender, MouseEventArgs e)
{
toMove = false;
}
#endregion

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape) Application.Exit();
}
}

Результат работы кода:
Скачать проект можно отсюда.

Постеры пространств имён

27 дек. 2009 г. | | |

Постер пространства имен .NET 3.5 скачать pdf
Постер пространства имен .NET 4.0 скачать pdf
Постер LinQtoSQL скачать pdf

Microsoft Enterprise Library

| | |

Microsoft Enterprise Library – это набор блоков приложений многоразового использования, созданных как решения проблем, с которыми специалисты по разработке программного обеспечения обычно сталкиваются при создании корпоративных приложений. Для использования библиотеки необходим .NET 3.5. Живет проект по адресу http://www.codeplex.com/entlib. Скачать Microsoft Enterprise Library 4.1 можно отсюда http://www.microsoft.com/downloads/details.aspx?FamilyId=1643758B-2986-47F7-B529-3E41584B6CE5&displaylang=en либо по предыдущей ссылке.
В Enterprise Library входят следующие блоки:
- блок кэширования (Caching Application Block), который применяется для реализации локального кэша;
- блок криптографии (Cryptography Application Block), служащий для исполнения алгоритмов хеширования и симметрического шифрования;
- блок доступа к данным (Data Access Application Block). Он используется для реализации функциональности, связанной с доступом к базам данных;
- блок обработки исключений (Exception Handling Application Block). Применяется для реализации унифицированной обработки исключений на всех уровнях приложения;
- блок протоколирования (Logging Application Block). Служит для исполнения механизмов ведения протоколов;
- блок безопасности (Security Application Block). Реализует механизмы авторизации и безопасного кэширования.
Посмореть презентацию об Enterprise Library вы можете по ссылке http://pnp.in.ua/video/EntLib/default.html, а по этой ссылке http://pnp.in.ua/Slides/EntLib/default.html находятся слайды из это презентации.

Набор системных диалогов для .Net

| | |


Оказывается, существует такая полезная библиотека для .NET 3.5 SP1 Ookii.Dialogs, которая содержит разные системные диалоги (Task dialog, Progress dialog, Credential dialog, Input dialog, Vista-style common file dialogs и др.). В библиотеке представлены две версии диалогов - для WinForms и для WPF. Однако при использовании этой библиотеки нужно учитывать, что большинство диалогов появилось только начиная с Vista. Поэтому для ОС версией меньше Vista, нужно писать обертку для отображения системных диалогов.
Скачать библиотеку можно по ссылке http://www.ookii.org/download.ashx?id=Dialogs. В архиве есть исходный код библиотеки, а так же полная документация.

Горячие клавиши (Hotkeys) Windows 7

26 дек. 2009 г. | | |

Список хоткеев в Window 7. Естественно, часть хоткеев не будет для вас новой, потому как унаследована от Windows XP. Сразу оговорюсь, список не претендует на полноту.

Управление окнами

Win+Home: Свернуть/развернуть все окна, кроме активного. («Потрясти» окно)
Win+Space: Сделать все окна прозрачными. (Задержать курсор над небольшой кнопкой в правом нижнем углу экрана.)
Win+Up: Развернуть активное окно на весь экран. (Перетащить окно вверх до упора, или дважды кликнуть по верхней рамке)
Win+Down: Свернуть активное окно или восстановить размер, если оно развёрнуто на весь экран
Shift+Win+Up: Развернуть окно по высоте (Перетащить нижнюю границу окна до таскбара)
Win+Left/Right: Занять окном левую/правую половину монитора, или восстановить размер (Перетащить окно влево/вправо до упора)

Таскбар

Win+цифра: Запустить программу под этим номером или переключиться на неё
Shift+Win+цифра: Запустить новую копию программы под этим номером (кликнуть колёсиком по иконке)
Ctrl+Win+цифра: Переключиться на следующее окно программы под этим номером (кликнуть, зажав Ctrl)
Alt+Win+цифра: Открыть джамплист программы под этим номером
Win+Tab(+Shift): Переключаться между всеми открытыми окнами с превьюшками над таскбаром в прямом (обратном) порядке
Win+B: Фокус на трэй
Ctrl+Shift+Click: Запустить программу от имени Администратора
Shift+Right-Сlick: Показать меню окна / группы

Проводник и Десктоп

Win+E: Вызвать окно проводника
Win+D: Показать Рабочий стол
Win+F: Поиск
Ctrl + Win + F: Поиск компьютеров
Ctrl+Shift+N: Создать новую папку
Alt+Up: Подняться на уровень выше по папкам
Backspace: Вернуться на предыдущий уровень по папкам
Alt+P: Включить панель просмотра файлов
Shift+Right-Click (по файлу): Добавляет в контекстное меню пункт «Скопировать путь» и много дополнительных пунктов в подменю «Отправить»
Shift+Right-Click (по папке): Добавляет в контекстное меню пункт, позволяющий открыть командную строку из этой папки
Ctrl + Scroll: уменьшение/увеличение размеров иконок
Ctrl+C: Копировать объект (папку, файл, фрагмент текста....)
Ctrl+Х: Вырезать объект (папку, файл, фрагмент текста....)
Ctrl+V: Вставить объект (папку, файл....)

Разное

Win+P: Открыть меню настройки режима презентации (второй монитор — проектор)
Win+(+/-): увеличить / уменьшить изображение (вызывает экранную лупу)
Win+G: Переключаться между запущенными гаджетами
Ctrl+Shift+Esc: диспетчер задач
Win+Pause: Панель управления\Все элементы панели управления\Система (Свойства системы)
Win, "Первые буквы названия программы", Enter: поиск программы по первым буквам ее названия, запуск. Раньше для этого надо было устанавливать сторонний софт типа Launchy, а теперь все влючено!
Win+R: Диалог "Выполнить"

Библиотека

22 дек. 2009 г. | | |

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





Майкл Ховард, Дэвид Леблан. Защищенный код. (скачать)
В этой книге разработчики найдут советы и рекомендации по защите создаваемых приложений на всех этапах процесса создания ПО — от проектирования безопасных приложений до написания надежного кода, способного устоять перед атакам хакеров. Здесь рассказывается о моделировании угроз, планировании процесса разработки защищенных приложений, проблемах локализации и связанных с ней опасностях, недостатках файловых систем, поддержке секретности в приложениях и анализе исходного кода на предмет безопасности. Авторы иллюстрируют свой рассказ примерами программ на самых разных языках — от C# до Perl. Издание обогащено знанием, полученным авторами в процессе реализации Windows Security Push — инициативы по укреплению защиты продуктов Microsoft. Интересно, что эту книгу Билл Гейтс объявил 'обязательным чтением в Microsoft'.

Библиотека

21 дек. 2009 г. | | |

Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. (скачать)
В предлагаемой книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны появились потому, что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Авторы излагают принципы использования паттернов проектирования и приводят их каталог. Таким образом, книга одновременно решает две задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения.
Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование.



Крэг Ларман. Применение UML 2.0 и шаблонов проектирования (скачать)
Применение UML 2.0 и шаблонов проектирования - всемирно известное издание, с помощью которого можно начать "мыслить объектами" и проникнуть в самую суть объектно-ориентированного анализа и проектирования. Основываясь на двух предыдущих изданиях, получивших широкую поддержку во всем мире, Крэг Ларман полностью обновил книгу, чтобы рассказать о новом стандарте UML 2.0, помочь читателям освоить искусство объектного проектирования и способствовать развитию эффективных приемов итеративного и гибкого моделирования.
Основываясь на своем беспрецедентном опыте преподавателя и консультанта, Ларман помогает читателям разобраться с подходами эволюционного определения требований и прецедентов, моделированием предметной области, проектированием на основе обязанностей, а также наиболее важными принципами объектно-ориентированного проектирования и многоуровневой архитектурой. С помощью этой книги вы сможете познакомиться также с шаблонами проектирования GoF и GRASP, итеративными методами, гибким подходом к использованию унифицированного процесса и многими другими темами.


Грегор Хоп, Бобби Вульф. Шаблоны интеграции корпоративных приложений. (скачать)
В данной книге исследуются стратегии интеграции корпоративных приложений с помощью механизмов обмена сообщениями. Авторы рассматривают шаблоны проектирования и приводят практические примеры интеграции приложений, демонстрирующие преимущества обмена сообщениями и эффективность решений, создаваемых на основе этой технологии. Каждый шаблон сопровождается описанием некоторой задачи проектирования, обсуждением исходных условий и представлением элегантного, сбалансированного решения. Авторы подчеркивают как преимущества, так и недостатки обмена сообщениями, а также дают практические советы по написанию кода подключения приложения к системе обмена сообщениями, маршрутизации сообщений и мониторинга состояния системы.
Книга ориентирована на разработчиков программного обеспечения и системных интеграторов, использующих различные технологии и продукты для обмена сообщениями, такие как Java Message Service (JMS), Microsoft Message Queuing (MSMQ), IBM WebSphere MQ, Microsoft BizTalk, TIBCO, WebMethods, SeeBeyond, Vitria и др.


Джошуа Кериевски. Рефакторинг с использованием шаблонов (скачать)
Данная книга представляет собой результат многолетнего опыта профессионального программиста по применению шаблонов проектирования. Авторский подход к проектированию состоит в том, что следует избегать как недостаточного, так и избыточного проектирования, постоянно анализируя готовый работоспособный код и реорганизуя его только в том случае, когда это приведет к повышению его эффективности, упрощению его понимания и сопровождения. Шаблоны проектирования - не панацея, так что бывают как ситуации, когда такая реорганизация должна выполняться с использованием шаблонов проектирования, так и ситуации, когда наилучшее решение состоит в отказе от них.
Автор на основании как собственного, так и чужого опыта детально рассматривает различные признаки кода, требующего рефакторинга, описывает, какой именно рефакторинг наилучшим образом подходит для той или иной ситуации, и описывает его механику, подробно разбирая ее на конкретных примерах из реальных задач.
Книга может рассматриваться и как учебник по рефакторингу для программиста среднего уровня, и как справочное пособие для профессионала, которое может подсказать, какое именно решение стоит принять в той или иной сложной ситуации.

Вигерс Карл. Программирование: Разработка требований к программному обеспечению. (скачать)
Эта книга посвящена разработке качественных требований к продукту, здесь описаны дюжины проверенных на практике способов выявления, формулирования, разработки, проверки, утверждения и тестирования требований к ПО, которые помогут разработчикам ПО, менеджерам и маркетологам создать эффективное ПО. Это перевод второго издания оригинальной книги, которое дополнено новыми главами о роли аналитика требований, важности бизнес-правил, а также о том, как формулирование требований важно для проектов по обслуживанию, для комплексных решений и проектов, разрабатываемых сторонними организациями.
Основная аудитория - аналитики требований и разработчики продукта, а также дизайнеры, программисты, тестеровщики ПО и другие члены команды , задача которых понять и удовлетворить чаяния клиентов, а также маркетологи, менеджеры по продуктам и менеджеры проекта, которые должны проникнуться "духом" и особенностями продукта, чтобы сделать его в полной мере конкурентоспособным.

Скотт Аблер. Гибкие технологии: экстремальное программирование и унифицированный процесс разработки. (скачать)
Книга посвящена гибкому моделированию - процессу, базирующемуся на практической деятельности и описывающему принципы построения полезных моделей. Она начинается с рассмотрения идей, принципов и методологии гибкого моделирования и описания методик, которые повысят вашу производительность. Кроме того, в этой книге переосмысливаются некоторые важные вопросы разработки программного обеспечения, такие как написание документации, организовация сеансов моделирования, подбор команды, занимающейся моделированием, применение UML. Как сказано в названии книги, в ней детально рассматриваются вопросы эффективного моделирования в XP-проектах. Книга рассчитана на разработчиков или специалистов по моделированию, которые хотят повысить свой профессиональный уровень.




Кент Бек. Экстремальное программирование: разработка через тестирование (скачать)
Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели, подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development — разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелых выводов. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой новой методики. В книге рассматриваются два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность свой работы и получить удовольствие от программирования.

Пишем приложение, поддерживающее плагины

20 дек. 2009 г. | | |

Идея проста – есть интерфейс ( IPlugin ), о котором знает главная программа, и который должны реализовывавать все плагины. Вот, в принципе, и вся идея :)

Плагины наше приложение будет искать и автоматически подгружать в меню Plugins из папки plugins. Естественно, плагины должны быть реализованы ввиде dll-модуля. Если в папке будет dll, содержащая классы, не реализующие интерфейс IPlugin, то лоадер просто игнорирует их.

Реализовать данную затею предлагаю на C# в виде простенького Windows Forms Application.

Итак, создаем новый проект (Windows Forms Application), назовем его, к примеру, PluginTest. На главную форму добавим меню (menuStrip1) и панель (contentHolder), на которую будем подгружать наши формы.


В меню добавляем пункты, как на картинке. На событие Click пункта меню Exit пишем код

Application.Exit();

По клику на SampleForm в панель contentHolder приложение должно будет загрузить форму. Давайте создадим класс, который будет ответственный за это. Для этого добавим в проект класс ContentManager. Перед использование его нужно инициализировать контролом, на который нужно подгружать различные формы. Код:

class ContentManager
{
protected static Control _contentHolder;

public ContentManager()
{

}

public static void Inizialize(Control ctrl)
{
_contentHolder = ctrl;
}

public static void LoadContent(Control content)
{
_contentHolder.Controls.Clear();
content.Dock = DockStyle.Fill;
_contentHolder.Controls.Add(content);
}
}

Теперь добавим в проект UserControl с именем SampleForm. Какой функционал будет выполнять данный контрол - полет вашей фантазии, я ограничусь лишь кнопочкой "Hello, world!". После этого на событие Click пункта меню SampleForm напишем:

ContentManager.LoadContent(new SampleForm());


Сейчас приступим к реализации плагинной системы. Помните, мы говорили об интерфейсе? Так вот, добавьте в солюшн проект типа Class Library и назовите его IPlugin. Вот код самого интерфейса:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace IPlugins
{
public interface IPlugin
{
Control GetContent();
String GetName();
}
}

Таким образом, плагин для нашего приложения должен реализовать две функции - GetContent() - должна вернуть контол т.е. форму плагина, а GetName() - название плагина для красивого отображения в меню.
Добавим ссылку на проект IPlugin в проект PluginTest.
А теперь создадим парочку плагинов! Для этого в солюшн добавьте еще один проект типа Class Library и назовите его SamplePlugin. В References этого проекта тоже надо добавить ссылку на проект IPlugin. Теперь подключим в using IPlugin и напишем простенький плагин :)

public class Plugin1 : IPlugin
{
private String _pluginName = "Plugin1";

public Plugin1()
{
}

public String GetName()
{
return _pluginName;
}

public Control GetContent()
{
SamplePluginUI content = new SamplePluginUI();
return content;
}

}
}

Класс Plugin1 реализует интерфейс IPlugin. В методе GetContent() он создает UserControl SamplePluginUI и возвращает его получателю. Добавьте в проект SamplePlugin UserControl с название SamplePluginUI.
Теперь осталось чуть-чуть. Наш ContentManager пока умеет подгружать на форму только Control'ы. Давайте научим его еще добывать формы из плагинов. Для этого в класс ControlManager добавьте следующий метод:

public static void LoadContent(Type t)
{
IPlugin plugin = (IPlugin)Activator.CreateInstance(t);
LoadContent(plugin.GetContent());
}

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

private void CheckForPlugins()
{
String PluginsDir = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "plugins");

if (!Directory.Exists(PluginsDir))
{
Directory.CreateDirectory(PluginsDir);
}

String[] PluginAssemblies = Directory.GetFiles(PluginsDir, "*.dll");

ToolStripMenuItem pluginsMenu = (ToolStripMenuItem) menuStrip1.Items["plugins"];

if (pluginsMenu.DropDown == null)
{
pluginsMenu.DropDown = new ToolStripDropDown();
}

foreach (String file in PluginAssemblies)
{
Assembly AddInAssembly = Assembly.LoadFrom(file);
foreach (Type t in AddInAssembly.GetExportedTypes())
{
if (t.IsClass && typeof(IPlugin).IsAssignableFrom(t))
{
AddPlugin(t, pluginsMenu);
}
}
}
}

private void AddPlugin(Type t, ToolStripMenuItem where)
{
IPlugin plugin = (IPlugin)Activator.CreateInstance(t);
string pluginName = plugin.GetName();
ToolStripMenuItem mi = new ToolStripMenuItem(pluginName);
mi.Click += new EventHandler(mi_Click);
mi.Tag = t;
where.DropDownItems.Add(mi);
}

void mi_Click(object sender, EventArgs e)
{
Type t = (Type)((ToolStripMenuItem)sender).Tag;
ContentManager.LoadContent(t);
}

Что тут происходит? В самом начале метода мы находим путь к папке plugins и проверяем, существует ли она. Потом выбираем из нее все файлы с расширением dll в массив PluginAssemblies. Далее, мы проверяем каждый элемент этого массива на то, является ли он классом и реализует ли интерфейс IPlugin. Если результат положительный, то добавляем его в меню Plugins методом AddPlugin().
Осталось только подправить конструктор формы Form1:

public Form1()
{
InitializeComponent();
ContentManager.Inizialize(this.contentHolder);
CheckForPlugins();
}

Вот и все, приложение, поддерживающее плагины, готово!
Исходный код можно скачать отсюда.

Ускоряем NetBeans

18 дек. 2009 г. | | |

Сегодня совершенно случайно :) набрела на заметку о том, как можно немного ускорить любимую IDE NetBeans (после Visual Studio, конечно). И так, суть ускорения сводится к настройкам для java-машины, с помощью которых мы разрешаем использовать большее количество памяти (384Мб), компилировать в машинный код большинство функций и оптимизировать их. Для этого в /etc/netbeans.conf или в ярлык для запуска IDE нужно добавить следующие опции

-J-client -J-Xms32m -J-Xmx384m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Xverify:none -J-XX:CompileThreshold=100 -XX:+CompressedOOPS -XX:+AggressiveOpts -XX:+TieredCompilation -XX:+DoEscapeAnalysis -XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled
О расшифровке ключей можно почитать тут - http://performance.netbeans.org/howto/jvmswitches/index.html (англ.)
Найдено тут

Рисуем красивые заголовки с помощью библиотеки gd PHP

14 дек. 2009 г. | | |

Как сделать красивый заголовок для статьи, например, рукописным текстом? Для одной статьи или, если их немного, можно посидеть в фотошопе и сделать заголовки. А если статей много и добавляются они регулярно - замучаешься сидеть в фотошопе!
В php есть чудная библиотека для работы с графикой, зовется gd. Ее функционалом мы и воспользуемся для решения поставленной задачи.
Сразу скажу, дабы избежать проблем с кириллицей, используйте шрифты, поддерживающие кириллицу!
А теперь начнем. Сперва создадим php-скрипт, который будет создавать чудный заголовок. В качестве параметра методом get мы будем передавать нашему скрипту текст заголовка.

<?php
#говорим браузеру, что далее будет картинка в формате png
header('Content-type: image/png');

if (isset($_GET['text']))
{
$text = rawurldecode(htmlspecialchars($_GET['text']));
}else $text = 'Without caption';
#ширина одной буквы выбранного текста
$letterwidth=12;
#ширина всей картинки
$width=$letterwidth*strlen($text);
#указываем путь к шрифту
$font = 'fonts/cyr.ttf';
#создаем картинку
$im = imagecreatetruecolor($width, 40);
#определяем цвета
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 113, 129, 152);
#закрашиваем фон
imagefilledrectangle($im, 0, 0, 999, 40, $white);
#пишем текст
imagettftext($im, 30, 0, 10, 30, $black, $font, $text);
#выдаем браузеру готовую картинку
imagepng($im);
#освобождаем ресурсы
imagedestroy($im);
?>
Думаю, что более комментировать скрипт не нужно. Теперь вместо заголовка статьи пишем

<img src="caption.php?text=Заголовок для статьи" alt="" />

Вот и все :)
Скрипт в работе вы можете увидеть тут
Скачать исходник вы можете тут

Прозрачный PNG в IE

13 дек. 2009 г. | | |

Тема довольно старая и избитая, но все же расскажу о том, что я делаю, чтобы в ИЕ прозрачные PNG картинки отображались без ужасного серого фона, который "любимый браузер" прикручивает к ним. И так, все совершенно не сложно.
Нам потребуется прозрачный gif размером 1х1 пикселей, которую назовем blank.gif. Далее, в хтмл-файле в разделе <head> пишем следующее:

<!--[if lt IE 7]>
<![if gte IE 5.5]>
<script type="text/javascript">
function fixPNG(element)
{
if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
{
var src;

if (element.tagName=='IMG')
{
if (/\.png$/.test(element.src))
{
src = element.src;
element.src = "blank.gif";
}
}
else
{
src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i)
if (src)
{
src = src[1];
element.runtimeStyle.backgroundImage="none";
}
}

if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='none')";
}
}
</script>
<style type="text/css">
.iePNG, IMG { filter:expression(fixPNG(this)); }
.iePNG A { position: relative; }
</style>
<![endif]>
<![endif]-->

Не забудьте исправить путь к gif-изображению, иначе фокус не получится.
Собственно говоря, это все. Скрипт когда-то давно был честно скачан, откуда - не припоминается. Спасибо автору скрипта!

Защита контента с помощью javascript

| | |

При выполнении очередного заказа столкнулась с проблемой защиты контента от копирования. Конечно, самая лучшая защита - не выкладывать контент в интернет :). Но так как этот вариант не подходил, то для защиты контента от копирования был написан маленький скриптик:

<script language="JavaScript">
//autor tan4eg
function disableSelection(target)
{
if (typeof target.onselectstart!="undefined")
{
target = document;
target.onselectstart=function(){return false;};
}
else
{
if (typeof(target.style.MozUserSelect)!="undefined")
{
target.style.MozUserSelect="none";
}
else
{
target = document;
target.onmousedown=function(){return false;};
}
}
target.style.cursor = "default";
}
document.oncontextmenu = function() { return false; }
window.onload = function()
{
if (document.getElementById("maintable"))
{
disableSelection(document.getElementById("maintable"));
}
}
</script>

Для использования скрипта достаточно поместить его текст между тэгами <head>
Суть работы скрипта в том, что он запрещает выделение контента у конкретного элемента, id которого мы задаем в обработчике window.onload. Для большей уверенности скрипт также запрещает контекстное меню. Однако это далеко не панацея :(