Недавно наткнулась на свою программку, которая создает окно произвольной формы. Написана она была на 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();
}
}
Результат работы кода:
Скачать проект можно отсюда.
Окна произвольной формы на C#
Постеры пространств имён
Постер пространства имен .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
Список хоткеев в 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: Диалог "Выполнить"
Библиотека
С. Макконнелл. Совершенный код (скачать)
Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих искусство и науку программирования. Опираясь на академические исследования, с одной стороны, и практический опыт коммерческих разработок ПО - с другой, автор синтезировал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработками вы ни работали, какова бы ни была сложность вашего проекта, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
Майкл Ховард, Дэвид Леблан. Защищенный код. (скачать)
В этой книге разработчики найдут советы и рекомендации по защите создаваемых приложений на всех этапах процесса создания ПО — от проектирования безопасных приложений до написания надежного кода, способного устоять перед атакам хакеров. Здесь рассказывается о моделировании угроз, планировании процесса разработки защищенных приложений, проблемах локализации и связанных с ней опасностях, недостатках файловых систем, поддержке секретности в приложениях и анализе исходного кода на предмет безопасности. Авторы иллюстрируют свой рассказ примерами программ на самых разных языках — от C# до Perl. Издание обогащено знанием, полученным авторами в процессе реализации Windows Security Push — инициативы по укреплению защиты продуктов Microsoft. Интересно, что эту книгу Билл Гейтс объявил 'обязательным чтением в Microsoft'.
Библиотека
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. (скачать)
В предлагаемой книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны появились потому, что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Авторы излагают принципы использования паттернов проектирования и приводят их каталог. Таким образом, книга одновременно решает две задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения.
Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование.
Крэг Ларман. Применение 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. Книга будет полезна для любого программиста, желающего повысить производительность свой работы и получить удовольствие от программирования.
Пишем приложение, поддерживающее плагины
Идея проста – есть интерфейс ( 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
Сегодня совершенно случайно :) набрела на заметку о том, как можно немного ускорить любимую 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
Как сделать красивый заголовок для статьи, например, рукописным текстом? Для одной статьи или, если их немного, можно посидеть в фотошопе и сделать заголовки. А если статей много и добавляются они регулярно - замучаешься сидеть в фотошопе!
В 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
Нам потребуется прозрачный 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. Для большей уверенности скрипт также запрещает контекстное меню. Однако это далеко не панацея :(
Ярлыки
Копирайты
Блог о жизни вне кода
Архив блога
-
▼
2009
(40)
-
▼
декабря
(12)
- Окна произвольной формы на C#
- Постеры пространств имён
- Microsoft Enterprise Library
- Набор системных диалогов для .Net
- Горячие клавиши (Hotkeys) Windows 7
- Библиотека
- Библиотека
- Пишем приложение, поддерживающее плагины
- Ускоряем NetBeans
- Рисуем красивые заголовки с помощью библиотеки gd PHP
- Прозрачный PNG в IE
- Защита контента с помощью javascript
-
▼
декабря
(12)
Постоянные читатели
Популярно
-
Понравился анекдот о колбасе и яйцах :) Жена посылает мужа-программиста в магазин: - Дорогой, купи, пожалуйста, палку колбасы, и если б...
-
Продолжаю серию постов о своём первом андроид-приложении. Сегодня мысли о публикации приложения в разных маркетах.
-
Бета-версия одиннадцатой cтудии вызвала много охов и ахов. Чтобы там ни говорили, работать в ней приятно, хоть по началу немного необычно. ...
-
Про то, что SublimeText 2 - мега крутая вещь, знает, наверно, каждый. Да, я тоже в восторге от этого редактора, незамедлительно включила ег...
-
Что такое рефакторинг? М. Фаулер дает следующее определение рефакторинга ("Рефакторинг: улучшение существующего кода"): Рефактори...
-
Как-то встала передо мной задача сделать для сайта резиновый бэкграунд - то есть такой, который меняет размеры под размер окна браузера авт...
-
В июле этого года вышел SQL Server CE 4 CTP1, что, конечно же, является хорошей новостью! Скачать sql ce 4 можно с сайта Microsoft , дистри...
-
В мире больших и тяжеловесных ORM-решений, таких как NHibernate и Entity Framework, вполне предсказуемым стало появление течения микро-ORM...
-
Перевод поста "Top 10 Things That Annoy Programmers" Кевина Панга. Оригинал тут