Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 637

Очередной выпуск рассылки! За последнее время на сайте произошло столько всего, столько всего, что все просто не уместилось в этот выпуск! Но ничего, ведь вы всегда можете ознакомиться со всеми обновлениями непосредственно посетив сайт. Кстати, помимо изменения в содержании Kbyte.Ru, появлении новых интересных материалов, проект постоянно совершенствуется технически, и вы можете принять в этом непосредственное участие, присылая свои идеи и предложения.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Блог Kbyte.Ru

Удаление записей в ленте событий

Друзья! Сегодня был обновлён функционал ленты событий Kbyte.Ru. Теперь появилась возможность удалять ненужные записи. Кнопка удаления появляется в верхнем правом углу, когда указатель мышки находится над определенной записью.[cut]


Поскольку были обновлены некоторые клиентские скрипты, может потребоваться обновление кеша вашего интернет-обозревателя.

Приятного пользования!

--
Благодарю за внимание,
Ваш Kbyte.Ru.

[- к содержанию -]

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Сотрудник для удаленной работы на дому @androoo 22.03.2011 20:44
Здравствуйте! Я предлагаю Вам возможность заработать деньги, не выходя из дома. После первых трёх месяцев участия в проекте Вы будете иметь доход в 1000 евро – это доказано многочисленными участниками проекта. Подробная информация на сайте http://ссылка удалена

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 22.03.2011 21:03
Ссылка удалена по причине мошенничества с "Волшебными кошельками" Яндекс.Деньги.

Информация о мошенничестве передана в службу поддержки Яндекс.Деньги.
Учетная запись пользователя androoo (ID:1905) блокирована.

[- к содержанию -]

Добавить свой ответ в эту тему
Регистрация домена @bare 22.03.2011 07:29
Здравствуйте.
Поделитесь пожалуйста своим опытом в области регистрации (покупки, аренды) доменов .com
На каком сайте регистрировали, какие сервисы предлагаемые использовали. И вообще есть ли такое понятие как "покупка домена" или только их можно брать в аренду?
Многие сайты, как я понимаю, являются посредниками. Какой, так скажем, является официальным, изначальным?
Лично я зарегестрировал домен на сайте www.nic.ru

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 22.03.2011 10:33
На каком сайте регистрировали, какие сервисы предлагаемые использовали.
Я уже много лет пользуюсь услугами RU-CENTER (http://nic.ru/).
Доменов в зоне .com у меня пока нет, в основном .ru, но есть и .su, .net, .org. Собственно, зона значения не имеет, любой российский регистратор умеет работать с любыми популярными доменными зонами.
И вообще есть ли такое понятие как "покупка домена" или только их можно брать в аренду?
Нет, купить домен нельзя.
Многие сайты, как я понимаю, являются посредниками. Какой, так скажем, является официальным, изначальным?
Ру-Центр вроде как живет уже более 10 лет, и считается надежной компанией. Ру-Центр корнями произошел из РосНИИРОС (Российский научно-исследовательский институт развития общественных сетей - Russian Institute for Public Networks (RIPN)), т.е. фактически вырос из государственной организации.
Совсем недавно, Ру-Центр был куплен РБК.

Любой регистратор должен получить аккредитацию ICANN (Internet Corporation for Assigned Names and Numbers), которая собственно и занимается распределением доменных зон.
Что касается доменных зон типа .com, то регистраторы заключают соглашение с компанией, которой принадлежит права на управление этой зоной, в данном случае с VeriSign Inc.

[- к содержанию -]

Ответ #2 @bare 22.03.2011 11:31
Спасибо за развернутый ответ )

[- к содержанию -]

Добавить свой ответ в эту тему
HTTP заголовки XML VB6 @artF 20.03.2011 15:50
Помогите плз..нужно вот что.чтобы программа отправила заголовок на сервер по мимо этого она должна отправить Request и получить ответ от xml странички..Можете помочь как это сделать?

[- к содержанию -]

Добавить свой ответ в эту тему
Kbyte.Ru 5.0 code name Sunrise @Aleksey Nemiro 19.03.2011 10:24
Год назад, 19 марта (2010), была запущена пятая версия проекта - Kbyte.Ru 5.0 code name Sunrise!
Поздравляю всех с очередным праздником!

Сегодня можно немного поностальгировать:
Kbyte.Ru v.2.0 (25.03.2006)
Kbyte.Ru v.4.5 (25.02.2008)
(read only)

[- к содержанию -]

Ответ #1 @[i]Pro 19.03.2011 12:38
Интересно) Я версию 45 еще захватить, успел когда только начинал программировать часто захаживал смотреть новые исходники

[- к содержанию -]

Ответ #2 @Aleksey Nemiro 19.03.2011 13:31
Да, в v.4.5 было целых три (!) раздела с исходниками :-))

[- к содержанию -]

Добавить свой ответ в эту тему
e.Button = Windows.Forms.MouseButtons .Left @ekha 18.03.2011 16:06
e.Button = Windows.Forms.MouseButtons.Left дает ошибка
Property 'Button' is 'ReadOnly'

Как исправит?

PS. Я хочу программно нажат левая клавиша мышь

Заранее спасибо

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 18.03.2011 16:14
Таким способом программно нажать кнопку мышки не получится.
Как я понимаю, речь идет о RichTextBox, тогда проще создать MouseEventArgs:
Dim customE As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 0, 0, 0) 
RichTextBox1_MouseClick(RichTextBox1, customE)

[- к содержанию -]

Ответ #2 @ekha 18.03.2011 17:43
Спасибо большое!
Я хочу узнать слово во время нажатие на нем правая клавиша мыша, но не получается..Т.е. как сделать так чтоб когда нажимаем на правую курсор пошел в этой слове.

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 18.03.2011 17:54
    If e.Button = Windows.Forms.MouseButtons.Right Then 
      RichTextBox1.SelectionStart = RichTextBox1.GetCharIndexFromPosition(e.Location) 
    End If

[- к содержанию -]

Добавить свой ответ в эту тему
Свойства SelectionText элемента RichTextBox @ekha 18.03.2011 13:28
Помогите пожалуйста!
Есть некоторый текст в RichTextBox. Как сделать чтоб при нажатие правая кнопка мыши на слово узнать этого слово?
Заранее благодарен....

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 18.03.2011 15:01
У RichTextBox есть свойство, в котором содержится позиция курсора. На основе этого, можно найти начало и конец слова.
Конечный код будет зависеть от языка программирования.

На Visual Basic .NET будет примерно так:
Private Sub RichTextBox1_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseClick 
  Dim iStart As Integer = 0, iEnd As Integer = 0 
  Dim myReg As System.Text.RegularExpressions.Regex 
  Dim pattern As String = "[\.\,\!\?\x22\'\(\)\[\]\;\:\s\n]" 
  'ищем начало слова 
  If RichTextBox1.SelectionStart = 0 Then 
   iStart = 0 'позиция курсора в начале текста 
  Else 
   myReg = New System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.RightToLeft) 
   iStart = myReg.Match(RichTextBox1.Text, RichTextBox1.SelectionStart).Index 
  End If 
 
  'ищем конец 
  myReg = New System.Text.RegularExpressions.Regex(pattern) 
  iEnd = myReg.Match(RichTextBox1.Text, RichTextBox1.SelectionStart).Index 
  If iEnd <= 0 Then iEnd = RichTextBox1.Text.Length 
 
  'выбираем слово (в данном случае выводим в заголовок формы) 
  Me.Text = RichTextBox1.Text.Substring(iStart, iEnd - iStart) 
End Sub

[- к содержанию -]

Ответ #2 @ekha 18.03.2011 15:12
Спасибо большое! Очень помогли. Спасибо

[- к содержанию -]

Добавить свой ответ в эту тему

Все темы и обсуждения

Исходные коды

Удаление опасных html-тегов

C#: Строки @Roger Martin 24.03.2011 20:28
Готовый класс на C#, который позволяет очищать указанный текст от опасных html-тегов и атрибутов, таких как фреймы, скрипты и т.п. Список разрешенных тегов можно указать в коллекции defaultTags, список атрибутов - DefaultAttributes. Для очистки текста используются регулярные выражения.
using System; 
using System.Collections.Specialized; 
using System.Globalization; 
using System.Text; 
using System.Text.RegularExpressions; 
 
namespace GalleryServerPro.Business 
{ 
  /// <summary> 
  /// Validates that HTML does not contain unauthorized elements, attributes, and javascript. 
  /// </summary> 
  public class HtmlScrubber 
  { 
    #region Static Default 
 
  /// <summary> 
  /// Gets the allowed attributes that apply to all HTML tags. 
  /// </summary> 
  /// <returns>Gets the allowed attributes that apply to all HTML tags.</returns> 
  static string DefaultAttributes() 
  { 
   return "class,style,id"; 
  } 
 
  /// <summary> 
  /// Gets the allowed HTML tags and their respective allowed attributes. 
  /// </summary> 
  /// <returns>Gets the allowed HTML tags and their respective allowed attributes.</returns> 
    static NameValueCollection DefaultTags() 
    { 
      NameValueCollection defaultTags = new NameValueCollection(); 
      defaultTags.Add("h1", "align"); 
      defaultTags.Add("h2", "align"); 
      defaultTags.Add("h3", "align"); 
      defaultTags.Add("h4", "align"); 
      defaultTags.Add("h5", "align"); 
      defaultTags.Add("h6", "align"); 
      defaultTags.Add("strong", ""); 
      defaultTags.Add("em", ""); 
      defaultTags.Add("u", ""); 
      defaultTags.Add("b", ""); 
      defaultTags.Add("i", ""); 
      defaultTags.Add("strike", ""); 
      defaultTags.Add("sup", ""); 
      defaultTags.Add("sub", ""); 
      defaultTags.Add("font", "color,size,face"); 
      defaultTags.Add("blockquote", "dir"); 
      defaultTags.Add("ul", ""); 
      defaultTags.Add("ol", ""); 
      defaultTags.Add("li", ""); 
      defaultTags.Add("p", "align,dir"); 
      defaultTags.Add("address", ""); 
      defaultTags.Add("pre", ""); 
      defaultTags.Add("div", "align"); 
      defaultTags.Add("hr", ""); 
      defaultTags.Add("br", ""); 
      defaultTags.Add("a", "href,target,name,title"); 
      defaultTags.Add("span", "align"); 
      defaultTags.Add("img", "src,alt,title"); 
 
   // Add the default attributes that apply to all HTML tags. 
   string defaultAttributes = DefaultAttributes(); 
   foreach (string key in defaultTags.AllKeys) 
   { 
    defaultTags.Add(key, defaultAttributes); 
   } 
 
      return defaultTags; 
    } 
    private NameValueCollection allowedTags = null; 
    static Regex regex = new Regex("<[^>]+>", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Multiline); 
    static Regex jsAttributeRegex = new Regex("javascript:", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); 
    static Regex xmlLineBreak = new Regex("&#x([DA9]|20|85|2028|0A|0D)(;)?", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); 
    static Regex filterdCharacters = new Regex("\\=|\\\"|\\'|\\s|\"'", RegexOptions.Compiled); 
    static Regex validProtocols = new Regex("^((http(s)?|mailto|mms):|/)", RegexOptions.Compiled | RegexOptions.IgnoreCase); 
    static Regex bannedChars = new Regex("\\s", RegexOptions.Compiled); 
    #endregion 
 
    #region Public Statics 
 
  /// <summary> 
  /// Clean potentially dangerous HTML and optionally remove javascript from the specified string. All 
  /// tags and attributes are compared to a list of acceptable HTML tags and attributes. Attributes not 
  /// in the white list are removed. If encodeExceptions=true, unrecognized tags are HTML encoded. If false, 
  /// tags are removed (but not the inner text of the tag). 
  /// </summary> 
  /// <param name="stringToClean">The string to clean.</param> 
  /// <param name="encodeExceptions">A value indicating whether to HTML-encode any HTML tags not present 
  /// in the list of acceptable HTML tags. If false, unrecognized tags are removed, but the contents of 
  /// the tag are preserved.</param> 
  /// <param name="filterScripts">A value indicating whether to remove any embedded javascript. A true 
  /// value indicates javacript is removed.</param> 
  /// <returns> 
  /// Returns a string with potentially dangerous HTML made safe. 
  /// </returns> 
  public static string Clean(string stringToClean, bool encodeExceptions, bool filterScripts) 
    { 
      if (string.IsNullOrEmpty(stringToClean)) 
        return stringToClean; 
 
      HtmlScrubber f = new HtmlScrubber(stringToClean, encodeExceptions, filterScripts); 
      return f.Clean(); 
    } 
 
  /// <summary> 
  /// Clean the potentially dangerous HTML so that unauthorized HTML and Javascript is removed. If the configuration 
  /// setting allowHtmlInTitlesAndCaptions is true, then the input is "cleaned" so that all HTML tags that are not in 
  /// a predefined list of acceptable HTML tags are HTML-encoded, and all attributes not found in the white list 
  /// are removed (e.g. onclick, onmouseover). If allowHtmlInTitlesAndCaptions = "false", then all HTML tags are 
  /// removed. Regardless of the configuration setting, all &lt;script&gt; tags are escaped and all instances of  
  /// "javascript:" are removed.  
  /// </summary> 
  /// <param name="html">The string containing the potentially dangerous HTML tags.</param> 
  /// <returns>Returns a string with potentially dangerous HTML tags HTML-encoded or removed.</returns> 
  public static string SmartClean(string html) 
  { 
   string cleanHtml = String.Empty; 
 
   if (GalleryServerPro.Configuration.ConfigManager.GetGalleryServerProConfigSection().Core.AllowHtmlInTitlesAndCaptions) 
   { 
    cleanHtml = HtmlScrubber.Clean(html, true, true); 
   } 
   else 
   { 
    cleanHtml = HtmlScrubber.RemoveAllTags(html); 
   } 
 
   return cleanHtml; 
  } 
 
    /// <summary> 
    /// Remove all HTML tags from the specified string. If the overload with the escapeQuotes parameter is true, then all  
  /// apostrophes and quotation marks are replaced with &quot; and &apos; so that the string can be specified in HTML  
  /// attributes such as title tags. If the escapeQuotes parameter is not specified, no replacement is performed. 
    /// </summary> 
    /// <param name="html">The string containing HTML tags to remove.</param> 
    /// <returns>Returns a string with all HTML tags removed, including the brackets.</returns> 
    public static string RemoveAllTags(string html) 
    { 
   return RemoveAllTags(html, false); 
    } 
 
    /// <summary> 
  /// Remove all HTML tags from the specified string. If the overload with the escapeQuotes parameter is true, then all  
  /// apostrophes and quotation marks are replaced with &quot; and &apos; so that the string can be specified in HTML  
  /// attributes such as title tags. If the escapeQuotes parameter is not specified, no replacement is performed. 
  /// </summary> 
    /// <param name="html">The string containing HTML tags to remove.</param> 
  /// <param name="escapeQuotes">When true, all apostrophes and quotation marks are replaced with &quot; and &apos;.</param> 
    /// <returns>Returns a string with all HTML tags removed, including the brackets.</returns> 
    public static string RemoveAllTags(string html, bool escapeQuotes) 
    { 
      if (html == null || html.Trim() == string.Empty) 
        return html; 
 
      HtmlScrubber f = new HtmlScrubber(html); 
      f.allowedTags.Clear(); 
 
   string cleanHtml = f.Clean(); 
 
   if (escapeQuotes) 
   { 
    cleanHtml = cleanHtml.Replace("\"", "&quot;"); 
    cleanHtml = cleanHtml.Replace("'", "&apos;"); 
   } 
 
   return cleanHtml; 
    } 
 
    #endregion 
 
    #region Private statics 
 
  //private static string StripScriptTags(string text) 
  //{ 
  //  return jsAttributeRegex.Replace(text, string.Empty); 
  //} 
 
    #endregion 
 
    #region Private members 
    string input = null; 
    StringBuilder output = new StringBuilder(); 
    bool cleanJS; 
    bool isFormatted; 
    bool encodeExceptions; 
    #endregion 
 
    #region cnstr 
 
    /// <summary> 
    /// Filters unknown markup. Will not encode exceptions 
    /// </summary> 
    /// <param name="html">Markup to filter</param> 
    public HtmlScrubber(string html) 
      : this(html, false, true) 
    { 
    } 
 
    /// <summary> 
    /// Filters unknown markup 
    /// </summary> 
    /// <param name="html">Markup to filter</param> 
    /// <param name="encodeRuleExceptions">Should unknown elements be encoded or removed?</param> 
    public HtmlScrubber(string html, bool encodeRuleExceptions) 
      : this(html, encodeRuleExceptions, true) 
    { 
 
    } 
 
    /// <summary> 
    /// Filters unknown markup 
    /// </summary> 
    /// <param name="html">Markup to filter</param> 
    /// <param name="encodeRuleExceptions">Should unknown elements be encoded or removed?</param> 
    /// <param name="removeScripts">Check for javascript: attributes</param> 
    public HtmlScrubber(string html, bool encodeRuleExceptions, bool removeScripts) 
    { 
      input = html; 
      cleanJS = removeScripts; 
      encodeExceptions = encodeRuleExceptions; 
      allowedTags = DefaultTags(); 
    } 
 
    #endregion 
 
    #region Cleaners 
  /// <summary> 
  /// Returns the results of a cleaning. 
  /// </summary> 
  /// <returns></returns> 
    public string Clean() 
    { 
      if (!isFormatted) 
      { 
        Format(); 
        isFormatted = true; 
      } 
      return output.ToString(); 
    } 
 
    #endregion 
 
    #region Format / Walk 
 
    /// <summary> 
    /// Walks one time through the HTML. All elements/tags are validated. 
    /// The rest of the text is simply added to the internal queue 
    /// </summary> 
    protected virtual void Format() 
    { 
      //Lets look for elements/tags 
      Match mx = regex.Match(input, 0, input.Length); 
 
      //Never seems to be null 
      while (!String.IsNullOrEmpty(mx.Value)) 
      { 
        //find the first occurence of this elment 
        int index = input.IndexOf(mx.Value, StringComparison.Ordinal); 
 
        //add the begining to this tag 
        output.Append(input.Substring(0, index)); 
 
        //remove this from the supplied text 
        input = input.Remove(0, index); 
 
        //validate the element 
        output.Append(Validate(mx.Value)); 
 
        //remove this element from the supplied text 
        input = input.Remove(0, mx.Length); 
 
        //Get the next match 
        mx = regex.Match(input, 0, input.Length); 
      } 
 
      //If not Html is found, we should just place all the input into the output container 
      if (input != null && input.Trim().Length > 0) 
        output.Append(input); 
    } 
 
    #endregion 
 
    #region Validators 
 
  /// <summary> 
  /// Main method for starting element validation 
  /// </summary> 
  /// <param name="tag">A string representing an HTML element tag. Examples: &lt;b&gt;, &lt;br /&gt;, &lt;p class="header"&lt;</param> 
  /// <returns>Returns the validated tag.</returns> 
    protected string Validate(string tag) 
    { 
      if (tag.StartsWith("</", StringComparison.Ordinal)) 
        return ValidateEndTag(tag); 
 
   if (tag.EndsWith("/>", StringComparison.Ordinal)) 
        return ValidateSingleTag(tag); 
 
 
      return ValidateStartTag(tag); 
 
    } 
 
  /// <summary> 
  /// Validates single element tags such as <br/> and <hr class="X"/> 
  /// </summary> 
  /// <param name="tag">A string representing a self-enclosed HTML element tag. Example: &lt;br /&gt;</param> 
  /// <returns>Returns the validated tag.</returns> 
  private string ValidateSingleTag(string tag) 
    { 
      string strip = tag.Substring(1, tag.Length - 3).Trim(); 
 
      int index = strip.IndexOfAny(new char[] { ' ', '\r', '\n' }); 
      if (index == -1) 
        index = strip.Length; 
 
      string tagName = strip.Substring(0, index); 
 
      int colonIndex = tagName.IndexOf(":", StringComparison.Ordinal) + 1; 
 
      string safeTagName = tagName.Substring(colonIndex, tagName.Length - colonIndex); 
 
      string allowedAttributes = allowedTags[safeTagName] as string; 
      if (allowedAttributes == null) 
        return encodeExceptions ? Uri.EscapeUriString(tag) : string.Empty; 
 
      string atts = strip.Remove(0, tagName.Length).Trim(); 
 
      return ValidateAttributes(allowedAttributes, atts, tagName, "<{0}{1} />"); 
 
 
 
    } 
 
    /// <summary> 
    /// Validates a start tag 
    /// </summary> 
  /// <param name="tag">A string representing a starting HTML element tag. Examples: &lt;b&gt;, &lt;p class="header"&lt;</param> 
  /// <returns>Returns the tag and any valid attributes.</returns> 
    protected virtual string ValidateStartTag(string tag) 
    { 
      //Check for potential attributes 
      int endIndex = tag.IndexOfAny(new char[] { ' ', '\r', '\n' }); 
 
      //simple tag <tag> 
      if (endIndex == -1) 
        endIndex = tag.Length - 1; 
 
      //Grab the tag name 
      string tagName = tag.Substring(1, endIndex - 1); 
 
      //watch for html pasted from Office and messy namespaces 
      int colonIndex = tagName.IndexOf(":", StringComparison.Ordinal); 
      string safeTagName = tagName; 
      if (colonIndex != -1) 
        safeTagName = tagName.Substring(colonIndex + 1); 
 
 
      //Use safe incase a : is present 
      string allowedAttributes = allowedTags[safeTagName] as string; 
 
      //If we do not find a record in the Hashtable, this tag is not valid 
      if (allowedAttributes == null) 
    return encodeExceptions ? Uri.EscapeUriString(tag) : string.Empty; //remove element and all attributes if not valid 
 
      //remove the tag name and find all of the current element's attributes 
      int start = (colonIndex == -1) ? tagName.Length : safeTagName.Length + colonIndex + 1; 
 
      string attributes = tag.Substring(start + 1, (tag.Length - (start + 2))); 
 
      //if we have attributes, make sure there is no extra padding in the way 
      if (attributes != null) 
        attributes = attributes.Trim(); 
 
      //Validate the attributes 
      return ValidateAttributes(allowedAttributes, attributes, tagName, "<{0}{1}>"); 
 
 
    } 
 
  /// <summary> 
  /// Validates the element's attribute collection 
  /// </summary> 
  /// <param name="allowedAttributes">The allowed attributes. Example: "href,target,name,title"</param> 
  /// <param name="tagAttributes">The tag attributes. Example: "src='mypic.jpg' alt='My photo'"</param> 
  /// <param name="tagName">Name of the tag. Examples: p, br, a</param> 
  /// <param name="tagFormat">The tag format. Examples: "&lt;{0}{1}&gt;" for a start tag such as &lt;p class="header"&gt;; "&lt;{0}{1} /&gt;" 
  /// for a complete tag such as &lt;br /&gt;</param> 
  /// <returns>Returns the tag and any valid attributes.</returns> 
  protected virtual string ValidateAttributes(string allowedAttributes, string tagAttributes, string tagName, string tagFormat) 
    { 
      string atts = ""; 
      // Are there any attributes to validate? 
      if (allowedAttributes.Length > 0) 
      { 
        tagAttributes = xmlLineBreak.Replace(tagAttributes, string.Empty); 
 
        for (int start = 0, end = 0; 
          start < tagAttributes.Length; 
          start = end) 
        { 
          //Put the end index at the end of the attribute name. 
          end = tagAttributes.IndexOf('=', start); 
          if (end < 0) 
            end = tagAttributes.Length; 
          //Get the attribute name and see if it's allowed. 
          string att = tagAttributes.Substring(start, end - start).Trim(); 
 
          bool allowed = Regex.IsMatch(allowedAttributes, string.Format(CultureInfo.CurrentCulture, "({0},|{0}$)", att), RegexOptions.IgnoreCase); 
          //Now advance the end index to include the attribute value. 
          if (end < tagAttributes.Length) 
          { 
            //Skip any blanks after the '='. 
            for (++end; 
              end < tagAttributes.Length && (tagAttributes[end] == ' ' || tagAttributes[end] == '\r' || tagAttributes[end] == '\n'); 
              ++end) ; 
            if (end < tagAttributes.Length) 
            { 
              //Find the end of the value. 
              end = tagAttributes[end] == '"' //Quoted with double quotes? 
                ? tagAttributes.IndexOf('"', end + 1) 
                : tagAttributes[end] == '\'' //Quoted with single quotes? 
                ? tagAttributes.IndexOf('\'', end + 1) 
                : tagAttributes.IndexOfAny(new char[] { ' ', '\r', '\n' } , end); //Otherwise, assume not quoted. 
              //If we didn't find the terminating character, just go to the end of the string. 
              //Otherwise, advance the end index past the terminating character. 
              end = end < 0 ? tagAttributes.Length : end + 1; 
            } 
          } 
          //If the attribute is allowed, copy it. 
          if (allowed) 
          { 
            //Special actions on these attributes. IE will render just about anything that looks like the word javascript: 
            //this includes line breaks, special characters codes, etc. 
      if (att.ToUpperInvariant() == "SRC" || att.ToUpperInvariant() == "HREF") 
            { 
              //File the value of the attribute 
              //string attValue  = tagAttributes.Substring(start + att.Length, end - (start+att.Length)).Trim(); 
              string attValue = tagAttributes.Substring(start, end - start).Trim(); 
 
              attValue = attValue.Substring(att.Length); 
 
              //temporarily remove some characters - mainly =, ", ', and white spaces 
              attValue = filterdCharacters.Replace(attValue, string.Empty); 
 
              //validate only http, https, mailto, and / (relative) requests are made 
              if (validProtocols.IsMatch(attValue)) 
              { 
                atts += ' ' + bannedChars.Replace(tagAttributes.Substring(start, end - start).Trim(), string.Empty); 
              } 
 
              //If the "if" above fails, we do not render the attribute! 
 
            } 
            else 
            { 
              atts += ' ' + tagAttributes.Substring(start, end - start).Trim(); 
            } 
 
 
          } 
        } 
        //Are we filtering for Javascript? 
        if (cleanJS) 
          atts = jsAttributeRegex.Replace(atts, string.Empty); 
      } 
      return string.Format(CultureInfo.InvariantCulture, tagFormat, tagName, atts); 
    } 
 
 
  /// <summary> 
  /// Validate end/closing tag 
  /// </summary> 
  /// <param name="tag">A string representing an HTML element end tag. Example: &lt;/p&gt;</param> 
  /// <returns></returns> 
    protected virtual string ValidateEndTag(string tag) 
    { 
      string tagName = tag.Substring(2, tag.Length - 3); 
 
      int index = tag.IndexOf(":", StringComparison.Ordinal) - 1; 
      if (index == -2) 
      { 
        index = 0; 
      } 
      tagName = tagName.Substring(index); 
      string allowed = allowedTags[tagName] as string; 
 
      if (allowed == null) 
    return encodeExceptions ? Uri.EscapeUriString(tag) : string.Empty; 
 
      return tag; 
 
    } 
 
    #endregion 
  } 
}

[- к содержанию -]

Нестандартный GUI

Visual Basic .NET: Интерфейс @[i]Pro 23.03.2011 21:20
3 различных оформления для Windows Form Application в замену стандартной формы. Имеется оформление, Button, ProgressBar для каждой темы.
Imports System.Drawing.Drawing2D 
 
Public Class Draw 
  Shared Sub Gradient(ByVal g As Graphics, ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer) 
    Dim R As New Rectangle(x, y, width, height) 
    Using T As New LinearGradientBrush(R, c1, c2, LinearGradientMode.Vertical) 
      g.FillRectangle(T, R) 
    End Using 
  End Sub 
  Shared Sub Blend(ByVal g As Graphics, ByVal c1 As Color, ByVal c2 As Color, ByVal c3 As Color, ByVal c As Single, ByVal d As Integer, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer) 
    Dim V As New ColorBlend(3) 
    V.Colors = New Color() {c1, c2, c3} 
    V.Positions = New Single() {0, c, 1} 
    Dim R As New Rectangle(x, y, width, height) 
    Using T As New LinearGradientBrush(R, c1, c1, CType(d, LinearGradientMode)) 
      T.InterpolationColors = V : g.FillRectangle(T, R) 
    End Using 
  End Sub 
End Class 
'Pearl Theme 
Public Class PTheme : Inherits Control 
  Private _TitleHeight As Integer = 25 
  Public Property TitleHeight() As Integer 
    Get 
      Return _TitleHeight 
    End Get 
    Set(ByVal v As Integer) 
      If v > Height Then v = Height 
      If v < 2 Then Height = 1 
      _TitleHeight = v : Invalidate() 
    End Set 
  End Property 
  Private _TitleAlign As HorizontalAlignment 
  Public Property TitleAlign() As HorizontalAlignment 
    Get 
      Return _TitleAlign 
    End Get 
    Set(ByVal v As HorizontalAlignment) 
      _TitleAlign = v : Invalidate() 
    End Set 
  End Property 
  Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs) 
    Dock = 5 
    If TypeOf Parent Is Form Then CType(Parent, Form).FormBorderstyle="0" 
    MyBase.OnHandleCreated(e) 
  End Sub 
  Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) 
    If New Rectangle(Parent.Location.X, Parent.Location.Y, Width - 1, _TitleHeight - 1).IntersectsWith(New Rectangle(MousePosition.X, MousePosition.Y, 1, 1)) Then 
      Capture = False : Dim M = Message.Create(Parent.Handle, 161, 2, 0) : DefWndProc(M) 
    End If : MyBase.OnMouseDown(e) 
  End Sub 
  Dim C1 As Color = Color.FromArgb(240, 240, 240), C2 As Color = Color.FromArgb(230, 230, 230), C3 As Color = Color.FromArgb(190, 190, 190) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        G.Clear(Color.FromArgb(245, 245, 245)) 
 
        Draw.Blend(G, Color.White, C2, C1, 0.7, 1, 0, 0, Width, _TitleHeight) 
 
        G.FillRectangle(New SolidBrush(Color.FromArgb(80, 255, 255, 255)), 0, 0, Width, CInt(_TitleHeight / 2)) 
        G.DrawRectangle(New Pen(Color.FromArgb(100, 255, 255, 255)), 1, 1, Width - 3, _TitleHeight - 2) 
 
        Dim S = G.MeasureString(Text, Font), O = 6 
        If _TitleAlign = 2 Then O = Width / 2 - S.Width / 2 
        If _TitleAlign = 1 Then O = Width - S.Width - 6 
        G.DrawString(Text, Font, New SolidBrush(C3), O, CInt(_TitleHeight / 2 - S.Height / 2)) 
 
        G.DrawLine(New Pen(C3), 0, _TitleHeight, Width, _TitleHeight) 
        G.DrawLine(Pens.White, 0, _TitleHeight + 1, Width, _TitleHeight + 1) 
        G.DrawRectangle(New Pen(C3), 0, 0, Width - 1, Height - 1) 
 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 
Public Class PButton : Inherits Control 
  Sub New() 
    ForeColor = C3 
  End Sub 
  Private State As Integer 
  Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs) 
    State = 1 : Invalidate() : MyBase.OnMouseEnter(e) 
  End Sub 
  Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) 
    State = 2 : Invalidate() : MyBase.OnMouseDown(e) 
  End Sub 
  Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs) 
    State = 0 : Invalidate() : MyBase.OnMouseLeave(e) 
  End Sub 
  Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) 
    State = 1 : Invalidate() : MyBase.OnMouseUp(e) 
  End Sub 
  Dim C1 As Color = Color.FromArgb(240, 240, 240), C2 As Color = Color.FromArgb(230, 230, 230), C3 As Color = Color.FromArgb(190, 190, 190) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        If State = 2 Then 
          Draw.Gradient(G, C2, Color.WhiteSmoke, 1, 1, Width, Height) 
        Else 
          Draw.Gradient(G, Color.WhiteSmoke, C2, 1, 1, Width, Height) 
        End If 
 
        If State < 2 Then G.FillRectangle(New SolidBrush(Color.FromArgb(80, 255, 255, 255)), 0, 0, Width, CInt(Height * 0.3)) 
 
        Dim S = G.MeasureString(Text, Font) 
        G.DrawString(Text, Font, New SolidBrush(ForeColor), Width / 2 - S.Width / 2, Height / 2 - S.Height / 2) 
        G.DrawRectangle(New Pen(C3), 0, 0, Width - 1, Height - 1) 
 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 
Public Class PProgress : Inherits Control 
  Private _Value As Integer 
  Public Property Value() As Integer 
    Get 
      Return _Value 
    End Get 
    Set(ByVal value As Integer) 
      _Value = value : Invalidate() 
    End Set 
  End Property 
  Private _Maximum As Integer = 100 
  Public Property Maximum() As Integer 
    Get 
      Return _Maximum 
    End Get 
    Set(ByVal value As Integer) 
      If value = 0 Then value = 1 
      _Maximum = value : Invalidate() 
    End Set 
  End Property 
  Dim C1 As Color = Color.FromArgb(240, 240, 240), C2 As Color = Color.FromArgb(230, 230, 230), C3 As Color = Color.FromArgb(190, 190, 190) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Dim V As Integer = Width * _Value / _Maximum 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        Draw.Gradient(G, C2, C1, 1, 1, Width - 2, Height - 2) 
        G.DrawRectangle(New Pen(C2), 1, 1, V - 3, Height - 3) 
        Draw.Gradient(G, C1, C2, 2, 2, V - 4, Height - 4) 
 
        G.FillRectangle(New SolidBrush(Color.FromArgb(50, 255, 255, 255)), 2, 2, V - 4, CInt(Height / 2) - 2) 
        G.DrawRectangle(New Pen(C3), 0, 0, Width - 1, Height - 1) 
 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 
'Modern Theme 
Public Class MTheme : Inherits Control 
  Private _TitleHeight As Integer = 25 
  Public Property TitleHeight() As Integer 
    Get 
      Return _TitleHeight 
    End Get 
    Set(ByVal v As Integer) 
      If v > Height Then v = Height 
      If v < 2 Then Height = 1 
      _TitleHeight = v : Invalidate() 
    End Set 
  End Property 
  Private _TitleAlign As HorizontalAlignment = 2 
  Public Property TitleAlign() As HorizontalAlignment 
    Get 
      Return _TitleAlign 
    End Get 
    Set(ByVal v As HorizontalAlignment) 
      _TitleAlign = v : Invalidate() 
    End Set 
  End Property 
  Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs) 
    Dock = 5 
    If TypeOf Parent Is Form Then CType(Parent, Form).FormBorderstyle="0" 
    MyBase.OnHandleCreated(e) 
  End Sub 
  Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) 
    If New Rectangle(Parent.Location.X, Parent.Location.Y, Width - 1, _TitleHeight - 1).IntersectsWith(New Rectangle(MousePosition.X, MousePosition.Y, 1, 1)) Then 
      Capture = False : Dim M = Message.Create(Parent.Handle, 161, 2, 0) : DefWndProc(M) 
    End If : MyBase.OnMouseDown(e) 
  End Sub 
  Dim C1 As Color = Color.FromArgb(74, 74, 74), C2 As Color = Color.FromArgb(63, 63, 63), C3 As Color = Color.FromArgb(41, 41, 41), _ 
  C4 As Color = Color.FromArgb(27, 27, 27), C5 As Color = Color.FromArgb(0, 0, 0, 0), C6 As Color = Color.FromArgb(25, 255, 255, 255) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        G.Clear(C3) 
 
        Draw.Gradient(G, C4, C3, 0, 0, Width, _TitleHeight) 
 
        Dim S = G.MeasureString(Text, Font), O = 6 
        If _TitleAlign = 2 Then O = Width / 2 - S.Width / 2 
        If _TitleAlign = 1 Then O = Width - S.Width - 6 
        Dim R As New Rectangle(O, (_TitleHeight + 2) / 2 - S.Height / 2, S.Width, S.Height) 
        Using T As New LinearGradientBrush(R, C1, C3, LinearGradientMode.Vertical) 
          G.DrawString(Text, Font, T, R) 
        End Using 
 
        G.DrawLine(New Pen(C3), 0, 1, Width, 1) 
 
        Draw.Blend(G, C5, C6, C5, 0.5, 0, 0, _TitleHeight + 1, Width, 1) 
 
        G.DrawLine(New Pen(C4), 0, _TitleHeight, Width, _TitleHeight) 
        G.DrawRectangle(New Pen(C4), 0, 0, Width - 1, Height - 1) 
 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 
Public Class MButton : Inherits Control 
  Sub New() 
    ForeColor = Color.FromArgb(65, 65, 65) 
  End Sub 
  Private State As Integer 
  Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs) 
    State = 1 : Invalidate() : MyBase.OnMouseEnter(e) 
  End Sub 
  Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) 
    State = 2 : Invalidate() : MyBase.OnMouseDown(e) 
  End Sub 
  Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs) 
    State = 0 : Invalidate() : MyBase.OnMouseLeave(e) 
  End Sub 
  Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) 
    State = 1 : Invalidate() : MyBase.OnMouseUp(e) 
  End Sub 
  Dim C1 As Color = Color.FromArgb(31, 31, 31), C2 As Color = Color.FromArgb(41, 41, 41), C3 As Color = Color.FromArgb(51, 51, 51), _ 
  C4 As Color = Color.FromArgb(0, 0, 0, 0), C5 As Color = Color.FromArgb(25, 255, 255, 255) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        G.DrawRectangle(New Pen(C1), 0, 0, Width - 1, Height - 1) 
 
        If State = 2 Then 
          Draw.Gradient(G, C2, C3, 1, 1, Width - 2, Height - 2) 
        Else 
          Draw.Gradient(G, C3, C2, 1, 1, Width - 2, Height - 2) 
        End If 
 
        Dim O = G.MeasureString(Text, Font) 
        G.DrawString(Text, Font, New SolidBrush(ForeColor), Width / 2 - O.Width / 2, Height / 2 - O.Height / 2) 
 
        Draw.Blend(G, C4, C5, C4, 0.5, 0, 1, 1, Width - 2, 1) 
 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 
Public Class MProgress : Inherits Control 
  Private _Value As Integer 
  Public Property Value() As Integer 
    Get 
      Return _Value 
    End Get 
    Set(ByVal value As Integer) 
      _Value = value : Invalidate() 
    End Set 
  End Property 
  Private _Maximum As Integer = 100 
  Public Property Maximum() As Integer 
    Get 
      Return _Maximum 
    End Get 
    Set(ByVal value As Integer) 
      If value = 0 Then value = 1 
      _Maximum = value : Invalidate() 
    End Set 
  End Property 
  Dim C1 As Color = Color.FromArgb(31, 31, 31), C2 As Color = Color.FromArgb(41, 41, 41), C3 As Color = Color.FromArgb(51, 51, 51), _ 
  C4 As Color = Color.FromArgb(0, 0, 0, 0), C5 As Color = Color.FromArgb(25, 255, 255, 255) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Dim V As Integer = Width * _Value / _Maximum 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        Draw.Gradient(G, C2, C3, 1, 1, Width - 2, Height - 2) 
        G.DrawRectangle(New Pen(C2), 1, 1, V - 3, Height - 3) 
        Draw.Gradient(G, C3, C2, 2, 2, V - 4, Height - 4) 
 
        G.DrawRectangle(New Pen(C1), 0, 0, Width - 1, Height - 1) 
 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 
'Electron Theme 
Public Class ETheme : Inherits Control 
  Private _TitleHeight As Integer = 25 
  Public Property TitleHeight() As Integer 
    Get 
      Return _TitleHeight 
    End Get 
    Set(ByVal v As Integer) 
      If v > Height Then v = Height 
      If v < 2 Then Height = 1 
      _TitleHeight = v : Invalidate() 
    End Set 
  End Property 
  Private _TitleAlign As HorizontalAlignment = 2 
  Public Property TitleAlign() As HorizontalAlignment 
    Get 
      Return _TitleAlign 
    End Get 
    Set(ByVal v As HorizontalAlignment) 
      _TitleAlign = v : Invalidate() 
    End Set 
  End Property 
  Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs) 
    Dock = 5 
    If TypeOf Parent Is Form Then CType(Parent, Form).FormBorderstyle="0" 
    MyBase.OnHandleCreated(e) 
  End Sub 
  Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) 
    If New Rectangle(Parent.Location.X, Parent.Location.Y, Width - 1, _TitleHeight - 1).IntersectsWith(New Rectangle(MousePosition.X, MousePosition.Y, 1, 1)) Then 
      Capture = False : Dim M = Message.Create(Parent.Handle, 161, 2, 0) : DefWndProc(M) 
    End If : MyBase.OnMouseDown(e) 
  End Sub 
  Dim C1 As Color = Color.FromArgb(0, 70, 114), C2 As Color = Color.FromArgb(0, 47, 78), C3 As Color = Color.FromArgb(0, 34, 57), _ 
  C4 As Color = Color.FromArgb(0, 30, 50) 
  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) 
  End Sub 
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 
    Using B As New Bitmap(Width, Height) 
      Using G = Graphics.FromImage(B) 
        G.Clear(C3) 
 
        Draw.Blend(G, C2, C3, C1, 0.5, 1, 0, 0, Width, _TitleHeight) 
 
        G.FillRectangle(New SolidBrush(Color.FromArgb(15, 255, 255, 255)), 1, 1, Width - 2, CInt(_TitleHeight / 2) - 2) 
        G.DrawRectangle(New Pen(Color.FromArgb(35, 255, 255, 255)), 1, 1, Width - 3, _TitleHeight - 2) 
 
        Dim S = G.MeasureString(Text, Font), O = 6 
        If _TitleAlign = 2 Then O = Width / 2 - S.Width / 2 
        If _TitleAlign = 1 Then O = Width - S.Width - 14 
        Dim V = CInt(_TitleHeight / 2 - (S.Height + 4) / 2) 
 
        Draw.Gradient(G, C3, C2, O, V, S.Width + 8, S.Height + 4) 
        G.DrawRectangle(New Pen(C3), O, V, S.Width + 7, S.Height + 3) 
 
        Dim R As New Rectangle(O + 4, CInt(_TitleHeight / 2 - S.Height / 2), S.Width, S.Height) 
        Using T As New LinearGradientBrush(R, C1, C2, LinearGradientMode.Vertical) 
          G.DrawString(Text, Font, T, R) 
        End Using 
 
        G.DrawRectangle(New Pen(C1), 1, _TitleHeight + 1, Width - 3, Height - _TitleHeight - 3) 
 
        G.DrawLine(New Pen(C4), 0, _TitleHeight, Width, _TitleHeight) 
        G.DrawRectangle(New Pen(C4), 0, 0, Width - 1, Height - 1) 
        e.Graphics.DrawImage(B.Clone, 0, 0) 
      End Using 
    End Using 
  End Sub 
End Class 

[- к содержанию -]

Автозапуск программы

Visual Basic .NET: Система @[i]Pro 23.03.2011 21:13
Пример демонстрирующий как добавить свое приложение в автозапуск Windows путем создания значения реестра в ключе RunOnceEx.
Dim
regloc as String = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx" 
Dim regname as String = "Explorer32"  
Dim filepath as String = "C:\file.exe"  
 
My.Computer.Registry.SetValue(regloc, regname, filepath, Microsoft.Win32.RegistryValueKind.String)

[- к содержанию -]

Как обойти ограничение на использование свойства window.closed?

JavaScript: Окна и формы @Алексей Немиро 23.03.2011 14:09
При программном создании окон в JavaScript при помощи метода window.open можно определять состояние созданного окна путем проверки свойства closed. С локальным окнами особых проблем нет, а вот если окно создано для внешнего адреса, то в Opera использование свойства closed становится невозможным из-за ограничений безопасности. Однако, решение этой проблемы есть.
<script language="javascript" type="text/javascript"> 
 // переменная для хранения ссылки на окно 
 var myWin; 
 
 // функция для создания нового окна 
 function OpenWin(){ 
  // создаем пустое окно 
  myWin = window.open('','_blank','toolbar=no,status=no,resizable=yes,scrollbars=yes,width=500,height=500');  
  // выводим нужную страницу в это окно через фрейм 
  myWin.document.write('<html><body style=""margin:0;padding:0;"><iframe" width="500" height="500" src="http://kbyte.ru" frameborder="0" allowfullscreen></iframe></body></html>'); 
 } 
 
 // функция проверки закрытости окна 
 function CheckWin() { 
  // если окно существует, проверяем его закрытость 
  if(myWin&&(typeof(myWin.closed)=="undefined"||myWin.closed)){ 
   alert("Окно закрыто"); 
  } 
  else { 
   // окно еще не закрыто, продолжаем проверку 
   window.setTimeout("CheckWin()",250); 
  } 
 } 
 
 // запуск проверки окна на закрытость 
 window.setTimeout("CheckWin()",250); 
</script> 
 
<input type="button" value="открыть окно" onclick="OpenWin()" />

[- к содержанию -]

Проверка типа переменной

JavaScript: Общие вопросы @Алексей Немиро 23.03.2011 13:07
Для проверки типа данных переменных/объектов в JavaScript существует оператор typeof().
alert(typeof(123)); // выведет number 
alert(typeof("Kbyte.Ru")); // выведет string 
 
var id = 1; 
if(typeof(id)=="number") { 
 alert("id - это число!"); 
} else { 
 alert("id - это не число!"); 
} 
 
if(!typeof(aaa)) { //if(!aaa) 
 alert("Переменная aaa не существует!"); 
}

[- к содержанию -]

Специальные символы Url

JavaScript: Строки @Алексей Немиро 22.03.2011 13:21
Пример использования функций JavaScript для кодирования и декодирования uri.
// замена спец. символов в полноценном
url 
// исключая символы: ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #, цифры и символы латинского алфавита 
alert(encodeURI("http://example.com/?par1=Этот тест&par2=this is a test")); 
// результатом выполнения этого кода будет строка: 
// http://example.com/?par1=%D0%AD%D1%82%D0%BE%D1%82%20%D1%82%D0%B5%D1%81%D1%82&par2=this%20is%20a%20test 
 
// декодирование спец. символов в полноценном url обратно 
alert(decodeURI("http://example.com/?par1=%D0%AD%D1%82%D0%BE%D1%82%20%D1%82%D0%B5%D1%81%D1%82&par2=this%20is%20a%20test")); 
// результатом выполнения этого кода будет строка: 
// http://example.com/?par1=Этот тест&par2=this is a test 
 
// для кодирования отдельных значений можно использовать функцию encodeURIComponent 
alert(encodeURIComponent("Привет пользователь Kbyte.Ru!")); 
// результатом выполнения этого кода будет строка: 
// %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%20Kbyte.Ru! 
 
// для обратного кодирования нужно использовать функцию decodeURIComponent 
alert(decodeURIComponent("%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%20Kbyte.Ru!")); 
// результатом выполнения этого кода будет строка: 
// Привет пользователь Kbyte.Ru!

[- к содержанию -]

POST-запрос через WinSock

Visual Basic 5.0/6.0: Сетевое взаимодействие @Неизвестно 21.03.2011 11:06
Пример реализации POST-запросов по протоколу HTTP с использованием WinSock на Visual Basic 6.0.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Определение SelectionStart в RichTextBox

Visual Basic .NET: Элементы управления Windows @Алексей Немиро 18.03.2011 18:10
Пример показывает, как определить SelectionStart в RichTextBox при нажатии правой кнопки мышки. Как известно, свойство SelectionStart (каретка) автоматически меняется при клике левой кнопкой мышки, однако при нажатии правой и других кнопок, позиция каретки остается неизменной.
Private Sub RichTextBox1_MouseDown(sender
As Object, e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseDown 
  If e.Button = Windows.Forms.MouseButtons.Right Then 
    RichTextBox1.SelectionStart = RichTextBox1.GetCharIndexFromPosition(e.Location) 
  End If 
End Sub

[- к содержанию -]

Выбор слов в текстовом поле

Visual Basic .NET: Элементы управления Windows @Алексей Немиро 18.03.2011 18:06
Пример показывает, как выбрать слово в (Rich)TextBox в зависимости от расположения каретки. Поиск границ слов осуществляется с помощью регулярных выражений.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
  Dim myRich As New RichTextBox() 
  myRich.Text = "Это текст по которому можно ткнуть левой кнопкой мышки, " & vbCrLf & _ 
                "и выбранное слово появится в заголовке формы." & vbCrLf & _ 
                "Не стесняйтесь, попробуйте ;-)" 
  myRich.Dock = DockStyle.Fill 
 
  'обработчики событий 
  AddHandler myRich.MouseDown, AddressOf myRich_MouseClick 
 
  Me.Controls.Add(myRich) 
End Sub 
 
Private Sub myRich_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) 
  Dim myRich As RichTextBox = CType(sender, RichTextBox) 
  'переменные для хранения координат слова в RichTextBox 
  Dim iStart As Integer = 0, iEnd As Integer = 0 
  'поиск границ слова делается при помощи регулярных выражений 
  Dim myReg As System.Text.RegularExpressions.Regex 
  'шаблон регулярного выражения 
  Dim pattern As String = "[\.\,\!\?\x22\'\(\)\[\]\;\:\s\n]" 
 
  If myRich.SelectionStart = 0 Then 
    'курсор в начале строки 
    iStart = 0 
  Else 
    'ищем начало слова 
    'поиск начинаем с позиции курсора справа налево 
    myReg = New System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.RightToLeft) 
    iStart = myReg.Match(myRich.Text, myRich.SelectionStart).Index 
  End If 
 
  'ищем конец слова 
  'поиск делаем слева направо относительно позиции курсора 
  myReg = New System.Text.RegularExpressions.Regex(pattern) 
  iEnd = myReg.Match(myRich.Text, myRich.SelectionStart).Index 
  If iEnd <= 0 Then iEnd = myRich.Text.Length 
 
  'выводим выбранное слово в заголовок формы 
  Me.Text = myRich.Text.Substring(iStart, iEnd - iStart) 
End Sub

[- к содержанию -]

Все исходные коды

Новости мира IT

McAfee покупает разработчика программного обеспечения Sentrigo

Разработчик антивирусного программного обеспечения McAfee купил компанию Sentrigo, создающую программное обеспечение для мониторинга систем управления базами данных, а также за информацией в самих базах данных. При помощи данной покупки, сумма которой не разглашается, компания McAfee надеется предложить бизнес-пользователям новые интегрированные корпоративные продукты для обеспечения ИТ-безопасности.

Ранее на протяжении продолжительного периода времени Sentrigo уже была партнером McAfee. Фактически, компания Sentrigo и ее конкурент Imperva создали новый рынок - средств защиты баз данных от хакерского воздействия. Компания Imperva была куплена Oracle в мае прошлого года.

Флагманский продукт Sentrigo - программное обеспечение Hedgehog Enterprise, предназначенное для мониторинга СУБД и выявления любой несанкционированной активности как во внутреннем, так и во внешнем периметрах. Hedgehog поддерживала платформу McAfee ePolicy Orchestrator с сентября 2010 года, сразу же после того, как две компании объявили о заключении OEM-соглашения. Позже стороны выпустили три совместных продукта: McAfee Vulnerability Manager for Databases, McAfee Database Activity Monitoring и McAfee Integrity Monitoring for Databases.

После закрытия сделки по поглощению, Sentrigo войдет в состав подразделения McAfee Risk & Compliance business unit. Закрытие сделки ожидается в апреле этого года.

24.03.2011 09:26 · Категория: Бизнес в IT · Источник: CyberSecurity.ru

[- к содержанию -]

Apple будет передавать видео на телевизоры

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

Официально в компании эти данные не подтверждают, но источники в Apple говорят, что пока эти сведения являются конфиденциальными, так как не все детали процесса лицензирования еще согласованы и утверждены. До сих пор Apple лицензировала AirPlay только для работы с аудио, но источники в компании говорят, что первые устройства с полной поддержкой AirPlay могут появиться уже в этом году.

При помощи расширения возможностей AirPlay сама Apple может получить более широкое присутствие на массовом рынке, а кроме того выручить дополнительные деньги за счет лицензирования технологии AirPlay производителям телевизоров и различных аудио/видео-устройств. Вместе с тем, стоит также отметить, что в случае появления "всеядной" AirPlay необходимость в продаваемом ныне устройстве AppleTV фактически отпадает, впрочем, в компании всегда позиционировали работу над ним как "хобби".

Технология AirPlay была анонсирована в сентябре 2010 года как один из наиболее удобных способов передачи видео и аудио с компьютера Mac на устройства iPhone, iPad или AppleTV. Кроме того, технология позволяет просматривать ранее отснятые цифровые фотографии на большом экране.

24.03.2011 09:25 · Категория: Бизнес в IT · Источник: CyberSecurity.ru

[- к содержанию -]

Изменения в ленте событий Kbyte.Ru

Лента событий Kbyte.Ru потерпела небольшие изменения. Вчера была добавлена возможность удалять записи из ленты. Сегодня появилась возможность отправлять интересные записи в социальные сети, такие как: Вконтакте, Facebook, Twitter, Mail.Ru, Я.ру и ЖЖ.

В связи с этим, может потребоваться обновление кеша вашего интернет-обозревателя.

Приятного пользования!

Напомним, что лента событий Kbyte.Ru отражает в режиме реального времени все происходящее на сайте. Лента доступа только для зарегистрированных пользователей.

 

Лента событий Kbyte.Ru

23.03.2011 16:55 · Категория: Новости Kbyte.Ru · Источник: Kbyte.Ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное