Tuesday, August 19, 2008

Знаки вопроса в far

Ночью надо спать...
Нет, не обязательно спать ночь. Можно днем. Но спать надо...
Седня за***лся от того, что в Far у меня вместо русских букв отображались знаки вопроса. Прям все имена файлов в виде ?????????.txt
Обыскался в инете в чем дело. В форумах находил обсуждение проблем со шрифтами, но нигде такого случая, как у меня.
Долго я не мог вспомнить, что поменял в региональных настройках язык для программ не поддерживающих юникод.... Исправил на русский, ребутнулся и все заработало.

(п.с.: 4ый час утра. на улице духота. гремит гром, дождя нет. завтра на работу.)

Monday, August 18, 2008

Hide navigation bar in blogger

Наткнулся седня на совет, как убрать navigation bar из своего блога на блоггере.

дословный копипаст:


если Вы не хотите чтобы вверху вашего блога на Blogger.com был виден Navbar (служебный бар-полоска от Блоггера), тогда вставте в Ваш шаблон, в раздел стилей, эти строки:

#navbar-iframe {
height: 0px;
visibility: hidden;
display: none;
}

все, теперь этот Navbar буден невидим для пользователя.

Sunday, August 17, 2008

Default button & Default focus in user controls.

Возникла задача устанавливать фокус ввода на нужный контрол внутри user control и выбирать кнопку, которую надо нажать, когда в TextBox нажимают "Enter".

1) Для назначения чего нажимать при нажатии "Enter" легко удалось найти решение в инете:
пишется джава-скрипт

function TestEnterKey(btn)
{
if (document.all)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
document.getElementById(btn).click();
}
}
}


и метод, который будет его привязывать к контролу
    /// <summary>
/// Adds js to TextBox, that hits Button on pressing "Enter".
/// </summary>
/// <param name="baseControl">Control, that contains textbox and button.</param>
/// <param name="textBoxName">Text box, to which js should be added.</param>
/// <param name="buttonName">Button, that we should hit on pressing Enter.</param>
public static void AddDefaultButton(this Control baseControl, string textBoxName, string buttonName)
{
TextBox tb = ((TextBox) baseControl.FindControl(textBoxName));
tb.Attributes.Add("onkeypress",
"TestEnterKey(\"" +
baseControl.FindControl(buttonName).ClientID +
"\");");
}


теперь это можно использовать так:
PasswordRecovery1.UserNameTemplateContainer.AddDefaultButton("UserName", "SubmitButton");
PasswordRecovery1.QuestionTemplateContainer.AddDefaultButton("Answer", "SubmitButton1");


2) Сложнее оказалось с выставлением контрола, который будет выбираться по умолчанию.
Мне не удалось найти решение, которое меня полностью удовлетворило. В основной своей массе решения были пригодны либо только для серверных контролов и использовали методы Focuse(), SetFocuse(control), либо привязывали джава-скрипт к событию формы типа <form ... onload="some_java_script">. Последнее решение наиболее близко подходит к тому, что надо было мне. Но с ним есть беда: как привязывать джава-скприпт из user control? если внитри user control есть несполько панелек, и только одна из них видима в тот или иной postback, или, например, контрол состоит из шагов мастера, что собственно тоже самое, тогда надо определить несколько контролов, которые будут дефолтными и только на один из них в итоге будет выставлен фокус.

Короче такого решения я не нашил и пришлось написать велосипед.
Сделал так:
Написал метод:
    /// <summary>
/// Adds client-side script, that sets focus to the specified control.
/// </summary>
/// <param name="sender">Control that should be focused.</param>
/// <param name="e">Some other stuff, that isn't used here.</param>
public static void SetFocus(object sender, EventArgs e)
{
Control control = (Control) sender;
if (control != null)
{
string script = string.Format("setFocus(\"{0}\");", control.ClientID);
control.Page.ClientScript.RegisterStartupScript(typeof(string), Guid.NewGuid().ToString(), script, true);
}
}

, который привязывает к странице следующий скрипт:
function setFocus(ctrl)
{
var control = document.getElementById(ctrl);
if( control != null )
{
control.focus();
}
}

в итоге использовать это можно так:
PasswordRecovery1.UserNameTemplateContainer.FindControl("UserName").PreRender += Utils.SetFocus;
PasswordRecovery1.QuestionTemplateContainer.FindControl("Answer").PreRender += Utils.SetFocus;

Wednesday, August 6, 2008

IIS: two web-sites with different domains on one web-server

Всегда меня удивляло, что в IIS 6 на Windows XP только один веб-сайт и нельзя сделать второй. Сегодня я задался вопросом, как задать двум и более сайтам на своем веб-сервере разные доменные адреса типа aaa.com, bbb.com. Как выяснилось на моем веб-сервере с моей ОС это невозможно. Нужно либо ставить винду 2003, либо, что проще, поставить IIS 7. На лаптопе с вистой таких проблем нет :)