Сервис IPropertyValueUIService

Добавлено Дата: 18 December, 2010 категория: C#, Компоненты

предоставляет возможность отобразить рядом с именем свойства специальный значок (и даже не один), задать обработчик двойного щелчка на этом значке и установить всплывающую подсказку.

Это дает дополнительные возможности редактору свойств. Например, я покажу, как использовать этот сервис для отображения ошибочных значений.

Читать »

Слои и маркеры

Добавлено Дата: 18 December, 2010 категория: C#, Компоненты

При выборе компонента на форме дизайнер предоставляет возможность изменения размеров элемента управления с помощью маркеров (glyph). Количество и положение маркеров может меняться в зависимости от возможностей компонента. Так, например, кнопка имеет восемь маркеров, а компонент

Читать »

Сложное свойство

Добавлено Дата: 18 December, 2010 категория: C#, Компоненты

является классом, объединяющим несколько свойств. Для нашего класса градиентной заливки GradientLabel сложное свойство может объединять свойства startcoior и EndCoior. Пример такого класса я привел в листинге 8.1, а листинг 8.2 показывает обновленный класс GradientLabel, использующий новое свойство. Фактически я сохранил всю функциональность. Свойства startcoior и EndCoior, как и раньше, сохраняют начальный н конечный цвета градиентной заливки.

Читать »

Пример генерации перемещений

Добавлено Дата: 18 December, 2010 категория: Игры, Примеры, Теория

Можно рассуждать сколько угодно о различных программных решениях и алгоритмах, но лучше попытаться сделать хоть что-то своими силами. Да­вайте рассмотрим генерацию перемещений. Это в шахматной программе наиболее трудоемкий участок кода. Раньше подобные вещи писали исклю­чительно на ассемблере, чтобы получить требуемую эффективность. Сейчас применение ассемблера совершенно не обязательно. Современные процес­соры при хорошей компиляции и грамотном алгоритме обрабатывают код языка высокого уровня ничуть не хуже, чем ассемблер. Можно сказать даже более. Очень непросто написать ассемблерный код, который будет выпол­няться быстрее. Но это в сторону. Наша задача — рассмотреть алгоритмы, а не их оптимизацию на уровне машинного кода.

Читать »

Настраиваемые свойства

Добавлено Дата: 17 December, 2010 категория: C#, Компоненты

Очень часто свойства компонента одновременно оказываются и настройками программы или системы. Например, свойства PortName и BaudRate компонента SerialPort, очевидно, являются настройками системы. Было бы очень неудобно хранить эти настройки в коде программы и перекомпилировать ее при изменении номера порта или скорости обмена.

Читать »

Реализация собственного редактора типа

Добавлено Дата: 17 December, 2010 категория: C#, Компоненты

Теперь разберемся с методами класса UlTypeEditor более подробно. С методом GetEditstyle {} все просто. Если этот метод возвращает uiTypeEditorEditstyie. DropDown, то отображается небольшой треугольник, как у компонента DropDown. Значение UiTypeEditorEditstyie.Modal отображает кнопку с тремя точками, как у компонента выбора файла.

Читать »

Безопасность SOAP-посланий

Добавлено Дата: 17 December, 2010 категория: Java, Web, XML

Поскольку SOAP-послание представляет собой документ XML, к нему применимы все средства обеспечения безопасности, перечисленные в предыдущих разделах этой главы. Ничто не мешает зашифровать все послание целиком или его отдельные части, например, тело послания, или отдельные элементы XML, входящие в послание. SOAP-послание можно снабдить цифровой подписью как обычный документ XML.

Читать »

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

Добавлено Дата: 17 December, 2010 категория: C#, Компоненты

Еще одно применение сервиса IUlServiceTestDesigner-—управление окнами Visual Studio. Метод

bool ShowToolWindow(Guid toolWindow)

позволяет отобразить одно из окон, описанных в перечислении

StandardToolWindows: ObjectBrowser, OutputWindow, ProjectExplorer, PropertyBrowser, RelatedLinks, ServerExplorer, TaskList, Toolbox.

Читать »

Интерфейсы

Добавлено Дата: 17 December, 2010 категория: C#, Компоненты

Интерфейс — это именованный набор сигнатур методов (см. [5]). могут определять события и свойства, но не могут определять методов- конструкторов и экземплярных полей.

В С# для определения интерфейса используется ключевое слово interface, например:

Читать »

Углубление иерархии XML

Добавлено Дата: 16 December, 2010 категория: XSLT

Задача

Имеется плохо спроектированный документ, которому не помешали бы до­полнительные структурные уровни< ![if !supportFootnotes]>[2].

Решение

Эта задача противоположна рассмотренной в рецепте 8.7. Здесь нужно доба­вить в документ структурные уровни, возможно, для того чтобы организовать элементы по какому-нибудь дополнительному критерию.

Читать »

MiniMax и NegaMax

Добавлено Дата: 16 December, 2010 категория: Алгоритмы, Игры

Стратегия поиска лучшего хода была описана еще Клодом Шенноном. Впрочем, она очевидна, и любой человек, знакомый с программированием и рекурсией, может вывести ее самостоятельно. Коротко о рекурсии. Рекур­сия — это когда функция вызывает сама себя, и каждый раз при входе в функцию в стеке программы создается новая копия блока переменных. Это не относится к статическим переменным, общим для всех вызовов функ­ции, просто, если они описаны в теле функции, их область видимости ог­раничена данной функцией. Чем же так примечательна рекурсия? Она по­зволяет описать некоторые процессы, просто определив законы их разви­тия, а как конкретно будет развиваться алгоритм, не так уж и важно. Главное, мы задаем его параметры развития, и совершенно очевидно, что он работает. Формальные доказательства нас в данном случае не интересу­ют. Некоторые задачи, легко решаемые с помощью рекурсии, часто невоз­можно или сложно решить другими способами. Это же относится к поиску лучшего хода. Допустим, у нас есть некоторая воображаемая игра, где на доске (размеры которой не важны), ходят белые и черные фигуры. Есть правила игры, и фигуры им подчиняются. Эта игра может быть шахматами, шашками, уголками и т. д. Алгоритма лучшего хода мы не знаем. Как же нам найти если не лучший, то хоть осмысленный ход? Предположим, у нас уже есть функция, дающая оценку каждому ходу. Устройства этой функции мы не знаем, но можем ей пользоваться и оценивать каждый ход. Как же нам для некоторой позиции в игре найти лучший ход? Очевидно, надо по­лучить все перемещения, сделать оценку каждого из них и найти перемеще­ние с максимальной оценкой. Рассмотрим некоторый код в листинге:

Читать »

Для группировки пользуйтесь командой for-each-group, а не методом Мюнха

Добавлено Дата: 16 December, 2010 категория: XSLT

Задача

В XSLT 1.0 нет явной поддержки для группировки, поэтому приходится изоб­ретать косвенные и не слишком понятные методы.

Решение

Всякий раз, когда нужна группировка, пользуйтесь преимуществами весьма мощной команды xsl:for-each-group. У нее есть обязательный атрибут select, значением которого является выражение, отбирающее множество узлов, кото­рые нужно сгруппировать. Чтобы определить критерии разбиения этого множества на группы, задается один из четырех атрибутов группировки. Все они будут рассмотрены ниже. По ходу обработки вы можете пользоваться функцией current-group() для доступа ко всем узлам в текущей группе. Функция current-grouping-key() возвращает значение ключа, определяющего текущую группу, в случае, когда группировка осуществляется по значениям или по соседним узлам. Для группи­ровки по начальному или конечному узлу эта функция не возвращает никакого значения.

Читать »

Встроенные компоненты в CSharp примеры использования

Добавлено Дата: 16 December, 2010 категория: C#, Компоненты

В разд. 6.13 я уже рассказывал о компонентах, содержащих другие компоненты. Тогда для передачи Windows-сообщений мы использовали специальный обработчик wndproc. Это позволяло "выключать" режим дизайнера для внутренних компонентов, т. е. компоненты начинали работать так, как будто они работают в режиме выполнения. В этом разделе я хочу рассказать об интерфейсе TNestedContainer, позволяющем делать внутренние компоненты фактически реальными компонентами формы.

Читать »

Alpha-beta с амортизацией отказов

Добавлено Дата: 16 December, 2010 категория: Алгоритмы, Игры

Мы рассмотрели alpha-beta алгоритм. Он всегда возвращает значение из alpha-beta диапазона. Если мы, например, вызвали функцию поиска из кор­ня дерева с параметрами alpha = — 1, beta = 1, то, каким бы ни был истин­ный результат, наша функция вернет значение из заданного промежутка alpha и beta. Можно модернизировать функцию таким образом, чтобы воз­вращаемое значение не ограничивалось этим промежутком. Представим, что мы в некоторой точке дерева. Функция перебрала все перемещения, но так и не смогла улучшить alpha. В таком случае можно вернуть не alpha, а мак­симальное полученное значение для этого узла. Это никоим образом не скажется на конечном результате. Точность просчета будет такой же. Alpha- beta перебор с возвратом максимального полученного результата каждой функции называется alpha-beta с амортизацией отказов. Приведем его код:

Читать »

Создание диалоговых окон в режиме разработки

Добавлено Дата: 15 December, 2010 категория: C#, Компоненты

Сервис iuiService позволяет создавать диалоговые окна в режиме разработки:

П методы void ShowMessage (string message), void ShowMessage {string message, string caption) И DialogResult ShowMessage(string message, string caption, MessageBoxButtons buttons) отображают диалоговое сообщение, как на рис. 7.9. Последний метод позволяет управлять количеством кнопок диалога;

Читать »