среда, 28 сентября 2011 г.

Выложил Notes на Sourceforge.
Все последние версии будут там.
Вот ссылка: http://sourceforge.net/projects/notessoft/

вторник, 20 сентября 2011 г.

Сериализация (Serialization)
Основная моя деятельность в первую очередь связана с такими языками как Assembler, C (в первую очередь для микроконтроллеров) и один из диалектов Basic'а. В последнее время часто приходится работать с STL, FBD, LD (языки программирования для ПЛК). С объектно-ориентированным программированием сталкиваюсь довольно давно, но глубоко изучить его на тот момент так и не удалось.
И ВОТ! Сейчас довольно много занимаюсь этой темой.
Хотелось бы осветить один важный момент, а именно: сохранение различных настроек, состояний и тому подобное.
Если того не требует специфика (например мне как-то пришлось конфигурацию выносить в файл в формате XML (а первый вариант был вообще ASCII-текст), это нужно для того, чтобы была возможность править конфигу в ручную) можно использовать такую приятную вещь как сериализация!
Так как я рассматриваю всё в рамках .NET, то позволю себе процитировать великого Эндрю Троелсена: "Сериализация (serialization) - это термин, описывающий процесс преобразования объекта в линейную последовательность байтов".
То есть -  имеем мы объект и хотим его сохранить (например объект содержит конфигурацию), используя сериализацию, мы с минимальными усилиями можем это сделать. Нет необходимости городить всякие парсеры и т.п. Всё Очень Просто!
Алгоритм наших действий примерно такой:
1. Определиться с тем, какой класс должен быть доступен для сериализации и особрым образом пометить его (с помощью атрибута [Serializable]):
[Serializable]
public struct workSer
{
public string Val1;
public string Val2;
public string Val3;
}
2. Выбрать формат, в котором будет сохраняться объект (двоичный или SOAP). Будет использовать двоичный, для этого нам нужен класс BinaryFormatter, который лежит в пространстве имён: System.Runtime.Serialization.Formatters.Binary.
3. Пользуемся!

Для сведения разных вопросов по возможности к нулю, вот "рыба":

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace workSerialization
{
[Serializable]
public struct workSer
{
public string Val1;
public string Val2;
public string Val3;
}
public class test
{
public static void Main()
{
workSer ws = new workSer();
ws.Val1 = "first";
ws.Val2 = "second";
ws.Val3 = "third";

FileStream myStream = File.Create("config.dat");

BinaryFormatter myBF = new BinaryFormatter();
myBF.Serialize(myStream, ws);
myStream.Close();

myStream = File.OpenRead("config.dat");
workSer ws2 = (workSer)myBF.Deserialize(myStream);
Console.WriteLine("ws2 Valx = {0}, {1}, {2}", ws2.Val1, ws2.Val2, ws2.Val3);
myStream.Close();
Console.ReadLine();
}
}
}

Буду очень рад, если кому-то пригодится)))

воскресенье, 18 сентября 2011 г.

Последняя версия "Заметок" )))
В ней учтены последние пожелания пользователей:
1. Появилась возможность менять местоположение заметок.

2. Можно скрыть окно "Заметки" нажав правую клавишу мыши на поле с заметками и выбрать "Скрыть"

Программу можно скачать здесь:  http://ifolder.ru/25807961

воскресенье, 11 сентября 2011 г.


Я всё-таки  закончил свой первый маленький проект – программка «Заметки». В ней вы можете делать для себя маленькие записи, наподобие тех, что обычно пишутся на стикерах (с последующим приклеиванием куда-либо).
Хотя программка и позволяет только создавать заметки, у неё имеется достаточный набор настроек, для того, чтобы она полностью удовлетворила ваши запросыJ.
Скачать её вы можете здесь: http://ifolder.ru/25679144

А теперь небольшое описание, как с ней работать.
«Заметки» имеет два основных окна – это главное окно программы:

И окно, содержащее ваши записи. Оно может иметь два вида.
Первый вид: Стикер:

Второй вид: стандартное окно:

Рассмотрим ряд вопросов, связанных с описанием интерфейса и настройкой программы, а так же непосредственно с созданием заметок.

Создание заметки.
Создать заметку можно несколькими способами:
1. В главном окне программы нажать кнопку «Создать заметку».
2. В главном окне программы нажатием правой кнопки мыши на поле «Ваши заметки» вызвать контекстное меню, и выбрать в нём пункт «Добавить».
3. В главном окне программы на панели меню выбрать «Заметки->;Создать заметку…»
4. Двойным щелчком левой кнопки мыши на окне «Заметки».
5. Вызвать контекстное меню иконки в трее и выбрать Создать заметку.

После выполнения любого из перечисленных действий появится окно «Создать заметку»:

В нём необходимо будет ввести текст заметки и нажать кнопку «ОК» или Enter на клавиатуре.
Заметка будет видна в главном окне программы в поле «Ваши заметки» и в окне «Заметки».
Удаление заметки.
Удалить заметку можно следующими способами:
1.  В главном окне программы выделить заметку, которую нужно удалить, нажать правую кнопки мыши и выбрать пункт «Удалить».
2.  В главном окне программы выделить заметку, которую нужно удалить и нажать клавишу Del.

Описание интерфейса и настройка программы.
Главное окно программы содержит:
1.  Панель меню.
2.  Календарь.
3.  Область «Ваши заметки». В ней отображаются создаваемые вами заметки.
4.  Кнопку «Создать заметку». Создаёт заметку.
Через меню вы можете получить доступ к следующим командам:
1. «Файл»
«Файл->Выход» - выход из программы.
2. «Заметки»
«Заметки->Создать заметку…» - создание заметки.
«Заметки->Показать (Окно «Заметки»)» - отображает на переднем плане (поверх всех открытых окон) окно «Заметки».
«Заметки->Скрыть (Окно «Заметки»)» - скрывает в трей окно «Заметки»
3. «Сервис»
«Сервис->Настройка…» - открывает окно «Настройки»
Настройки разделены на две категории:
· Общие – Относятся ко всей программе в целом
· Окно «Заметки» - Настройка окна «Заметки».
«Общие»
· «Запускать при загрузке Windows» - программа «Заметки» будет запущена после загрузки ОС Microsoft Windows.
·  «Скрыть Главное окно после запуска» - главное окно программы будет свёрнуто в трей после запуска программы.
· «Цвет заднего фона» - цвет фона области «Ваши заметки» главного окна.
· «Цвет заголовка» - цвет заголовков календаря и области «Ваши заметки».
· «Цвет строк» - цвет строк (через одну) области «Ваши заметки».
· «Цвет окна «Создать заметку» - цвет окна «Создать заметку»

Окно «Заметки»
· «Скрыть окно «Заметки» после запуска» - окно «Заметки» будет свёрнуто в трей после запуска программы.
· «Поверх всех окон» - отображать окно «Заметки» поверх всех окон
· «Прозрачность» - задаёт прозрачность окна «Заметки» в процентах от 0 до 100%.
· «Вид окна «Заметки»:
Стандартный – обычное диалоговое окно.
Стикер – стилизованный под стикер вид окна
· «Цвет» - доступен только для  вида «Стандартный» задаёт цвет окна «Заметки».
· «Шрифт» - задаёт шрифт для окна «Заметки».

«Сервис->Язык» - позволяет выбрать язык интерфейса.

4. «Справка»
«Справка->О программе…» - показывает краткую информацию о программе.


При нажатии правой кнопкой мыши на поле «Ваши заметки» появится контекстное меню со следующими пунктами:
1.   «Добавить» - добавляет новую заметку.
2.    «Удалить» - удаляет выделенную заметку.

вторник, 6 сентября 2011 г.


   Сегодня рассмотрим тему окон нестандартной формы.
   Если бегло погуглить этот вопрос (с ориентацией на .NET), то можно остановиться на трёх достаточно интересных вещах:
  Очень познавательная статья! Используя данных подход можно получить фигурные окна с тенями и т.п. Если VB .NET не ваш любимый язык, то может помочь: http://www.developerfusion.com/tools/convert/vb-to-csharp/

  Ну уж очень простое решение.

  Вот этот вариант меня привлёк легкостью реализации. НО! Возник ряд интересных моментов, которые мы посмотрим ниже.

   Непосредственно сам проект лежит здесь: http://ifolder.ru/25589879
   С первого взгляда всё вроде бы хорошо, окошко выглядит интересно и симпатично.

  Но дальнейшее использование такого окна приводит к довольно некрасивым эффектам.
  Например, если задний фон тёмный (консоль), то появляется белый «налёт» на границе окна.

  Если на картинку, используемую в качестве BackgroundImage, посмотреть с увеличением, то можно увидеть, что край картинки имеет небольшую размытость, что и приводит к эффекту белого цвета вокруг окна.

  Если убрать эту размытость (на рисунке представлены чёткие границы):

  То получится довольно сносное решение (область, обведённая зелёным эллипсом):
    Конечно, есть WPF, который позволит решить данную задачу проще, но если использовать .NET 2.0 и Window Forms, то подход приведённый выше IMHO можно считать рабочим. Или опускаться на более глубокий уровень (ссылка 1). ИЛИ, использовать C++, а там уж точно придётся работать на глубине))).

Спасибо за внимание ;)