Рассылка закрыта
При закрытии подписчики были переданы в рассылку "БЛОГика: полезные советы" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Апрель 2006 → | ||||||
1
|
2
|
|||||
---|---|---|---|---|---|---|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
12
|
13
|
14
|
15
|
16
|
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
29
|
30
|
Статистика
-2 за неделю
Изучаем MDI и балуемся Word'ом
1026 |
Оглавление
Ошибки в коде.В прошлый выпуск рассылки вкрались странные ошибки, к примеру: ="FlatStyle.System". Откуда взялись кавычки, сам не представляю, у меня в коде их нет. Когда тестировал рассылку, тоже было всё в порядке, однако после выпуска всё-таки появилась эта дрянь, и не только она, весь код искажён. Раньше я пользовался преобразователем в HTML код, а тогда вот просто поставил тэг PRE, так как рассылка в этом случае занимала меньше места. Заранее предупреждаю о возможных искажениях в этом выпуске, хотя их и не должно быть, так как в ней будут использоваться предыдущие стили. Если у вас есть предложения или конструктивные замечания по темам выпуска, пишете по внешнему адресу рассылки.
Многодокументный интерфейс.Multiple-Document Interface (MDI) или многодокументный интерфейс позволяет вам отображать в одно и тоже время сразу несколько документов, причём каждый находится в своём собственном окне. Вы вероятно замечали, что приложения использующие такую технологию имеют в строке меню вкладку Window в английских версиях или Окно в русских. За примерами далеко ходить не надо, достаточно посмотреть на ваши Visual Studio.NET IDE (+Visual Macros IDE) или продукт Microsoft Office (такой как Word, Excel, Access и так далее). Между Single-Document Interface (SDI - однодокументный интерфейс) и MDI существуют некоторые отличия в поведении (см. behavior на вкладке свойств). Например, свойство Opacity - непрозрачность не повлияет на внешность дочерних форм MDI, плюс к этому метод Form.CenterToParent тоже не будет воздействовать на них, то есть, если создать главную форму (Form1), в ней вызвать показ другой формы (для VB.NET - frmSubform.ShowDialog()), а потом из неё применить этот метод, то frmSubform выровняется по центру Form1 (для расширения кругозора так же см. Form.CenterToScreen). Но расставить окна всё же можно, об этом будет рассказано ниже. Создаём родительскую форму MDI.Создать родительскую многодокументную форму очень просто. Чтобы это осуществить, нужно для начала:
Создаём дочерние формы MDI.Очень важным элементом приложений Multiple-Document Interface (MDI) являются дочерние формы MDI. Ладно, это фраза была вроде прикола, на самом деле это самые важные формы, иначе не зачем было бы использовать MDI. Сейчас мы создадим наследованные форму с элементом управления RichTextBox, на вроде редактора Word. В действительности можно использовать любые элементы управления и смешивать их как вздумается, механизму MDI это ни чуточку не повредит. Таким образом, перед вами откроются огромные возможности. Вообще, не бойтесь проводить разнообразные опыты, тогда программирование из нудного и трудного занятия превратится в конструктор, в некотором смысле ничуть не сложнее того же LEGO, где из кирпичиков собирается целое. Когда вы создаёте программу, то производите нечто подобное, только вот кирпичики у вас другие, но результат радует ничуть не меньше. Для создания дочерних форм MDI:
Как видно в Visual Studio.NET любая операция проходит с минимальными усилиями со стороны программиста. Это главным образом потому, что в данном случае программист всего лишь пользователь системы программирования, которая и делает работу удобной и комфортной. Сейчас я говорю даже не о графических возможностях интерфейса Visual Studio.NET IDE, а просто о механизме классов. Функции COM библиотек Windows зашиты в стандартные библиотеки SDK так ловко, что большая часть кода выполняется вне нашей видимости. На практике реализован принцип объектно-ориентированного программирования, то есть убрать всё не приятное и большое подальше, а пользователю-программисту оставить удобный и не требовательный интерфейс (имеется ввиду, интерфейс доступа к классам, а не графический). Когда вы научитесь мыслить классами, любая ваша программная задумка будет выполняться в наикратчайшие сроки. Определение активного дочернего окна MDI.Для этих целей мы используем свойство формы Form. ActiveMdiChild. Почему же в таком случае оно отсутствует в окне Свойств (Properties window) в виде оформления ([Design]). Перейдите по ссылке на неё, и вы поймёте, что данное свойство существует только для чтения. Посмотрите как это выглядит:
Описание разное, но суть одна. Так же в коде будет использовано свойство ActiveControl, для определения активного элемента управления в дочернем окне. Не находите, что хоть это свойство совершенно другого порядка, чем ActiveMdiChild, всё же можно уловить некую общность, и то и другое возвращают текущий активный элемент. К примеру, если бы у нас были записи, то очевидно, что одна из них была бы активна, в противном случае нам бы выдали нулевой указатель. Подобные сравнения крайне примечательны, так как, поняв принцип работы, вы существенно сэкономите ваше время, и в будущем будете более эффективно использовать свои знания. С языками программирования в Visual Studio.NET точно такая же ситуация, знаете хотя бы два из них, и будете знать все. Более того, в будущем программирование у вас пойдёт не конкретными инструкциями, а общими понятиями, что значительно улучшит ваш стиль, а так же надёжность и скорость ваших программ. То есть, не в грамматике дело, дело в том, что она выражает. Рекомендую вам почитать книгу <Язык программирования C++> третье издание, автор Бьерн Страуструп. Когда на других книгах написано <библия программиста> не верьте, потому что только это издание достойно такого названия, остальные являются лишь энциклопедическим материалом, сдобренным разнообразными примерами. Чтобы скопировать в буфер выделенную строку в RichTextBox дочернего окна сделаем следующее:
Подобным образом можно создать не только элементы копирования, но так же возможности вырезания и вставки. Проделайте текущую работу сами, она будет вашим домашним заданием, к тому же очень простым. Думаю ни у кого подобное не вызовет трудностей. Для вставки воспользуйтесь противоположной функцией Clipboard, какой не скажу, программист должен приучаться самостоятельно добывать себе информацию, воспользуйтесь помощью MSDN. Конечно, я исхожу из принципа, что вы, читая данную рубрику, параллельно создаёте приложение. Если вы этого не делали, то значит или слишком ленивы, или просто не подумали об этом, или считаете, что знаете всё настолько хорошо, что лишняя тренировка вам не нужна. Дело, конечно, ваше, но я настоятельно рекомендую проделывать описываемые мною операции, иначе вы попусту потеряете время.
Интуитивное программирование.Дочитав до этого раздела, задумайтесь над тем, какую пользу вы извлекли из предыдущего материала. Возможно, некоторые из вас скажут, что научились создавать приложения MDI. Другие подумают о грамматических конструкциях языка, или о конкретных методах и свойствах стандартных библиотек SDK. Но задайте себе вопрос, сможете ли вы с ходу повторить все описанные выше действия? Если нет, то может быть, вы ничему не научились, или научились, но далеко не всему, что было мною описано? Основная суть программирования состоит вовсе не в том, чтобы помнить мелкие детали конкретной реализации. Когда кузнец придаёт металлическим болванкам форму, думает ли он о том, что под каждым его ударом огромное количество атомов смещается? А ведь это только одна из сил воздействующих в данный момент на изделие. Способен ли человек кующий металл осознавать все последствия своей работы? С другой стороны нужно ли это вообще. Применительно к программированию данный вопрос не теряет своей актуальности. Программист создаёт некую модель действий, которая происходит в реальном времени, но от пользователей Visual Studio.NET не требуется знать, как работает операционная система, об этом заботится Framework SDK, нужно лишь понимать то, что хочешь получить. Так же стоит отметить существование Platform SDK, MFC и тому подобных библиотек, которые тоже являются некими заменителями, облегчающими жизнь, пусть даже и менее удобные, чем Framework. Кстати, Framework SDK и MFC обе вызывают функции библиотек Platform SDK.
Просмотрите следующий пример:
А теперь ответьте себе, для чего он нужен? Некоторые части совпадают с кодом изложенным выше, некоторые отличаются. Но главная суть заключается в том, что вам не нужно думать, над тем, как этот код работает, достаточно представлять лишь его предназначение для эффективного использования в своих программах. Или вот ещё:
Вряд идут вызовы одной и той же функции, но с разными аргументами и с разных элементов меню. Код увеличился аж в четыре раза, но вам то нужно помнить только одну четвёртую. Исходя из этого, следует простой вывод - вам необходимо создать себе некую библиотеку общих наработок, в которой вы будете хранить примеры удачных образцов кода, чтобы не набирать его каждый раз заново.
Размышления о Word'е.Пора немного отвлечься от Access и поговорить о других программных продуктах Microsoft Office. Безусловно, релятивные базы данных полезны, но суть в том, что наибольшей эффективности они достигают при взаимодействии с Visual Studio.NET, и не важно, является ли вторым связующим компонентом язык .NET, ASP или что-нибудь другое. Главное, что не каждому они вообще нужны. Вследствие этого у меня и возникла идея написать об автоматизировании Word. Откройте Word 2003 или более младшую версию и запустите "Редактор Visual Basic" (Alt+F11). Далее создайте модуль Insert⇒Module и назовите его Speak в свойствах (Properties (Name)). Затем вставьте в него следующий код:
Запустите окно Сервис⇒Настройка:. На вкладке Команды в списке Категории выберите Макросы. Далее перетащите на любую панель инструментов Speak.Speak.SpeakText. Наведите на появившуюся кнопку, правой кнопкой мыши задайте Только тест (в меню) и Выбрать значок для кнопки второй сверху и слева. Теперь настало время испытаний. Выделите любой текст в вашем документе Word, и нажмите кнопку, которую вы создали. В ответ вы увидите появляющегося Мерлина произносящего слова. Следует отметить, что эта технология использует речевой движок, так что у вас он должен быть установлен. Удалите всё лишнее из кода макроса и можете использовать эту кнопку как профессиональный инструмент. На этом сегодняшняя рубрика подходит к концу.
Новые возможности ASPВ активные серверные страницы (ASP) были добавлены новые возможности, облегчающие работу создателям сценариев и разработчикам веб-приложений.
Продолжаем рассуждать.Возможно, некоторым из вас надоело, что я всё рассуждаю, рассуждаю, но привожу мало примеров. В оправдание могу лишь сказать, что думать вообще полезно. А чтобы уметь программировать, даже не всегда необходимо знать, как работает код. Для тех, кто не понял, это я продолжаю тему интуитивного программирования. Откройте документацию MSDN 2004, если она конечно у вас есть, из меню Программы⇒Microsoft Visual Studio .NET 2003⇒Microsoft Visual Studio .NET 2003 Documentation. После этого нам откроется документация, лично у меня она состоит из двух пунктов MSDN Library-July 2004 и DirectX SDK Update (Summer 2003). Здесь вы можете найти обширную информацию по интересующим вас вопросам, нужно лишь научиться грамотно, пользоваться данной системой помощи. К примеру, мне захотелось узнать способы работы с базами данных или что-либо в этом роде. Нет ничего проще. Во-первых, документация часто разделена на описание классов и конкретных примеров использования. Это значит, если нам нужно использовать одно свойство, метод, событие, то нужно лезть в библиотеку классов, в противном случае лучше поискать готовые примеры. Во-вторых, в MSDN существует очень удобная система поиска, не нужно ходить по древовидному списку, запоминайте ключевые слова прочитанных вами статей, а потом возвращайтесь к ним по Index или Search, а затем синхронизируйтесь со списком оглавления. На эту тему можно много чего ещё сказать, но я лучше покажу, как говориться "Лучше один раз увидеть, чем сто раз услышать".
Пример взятый выше был извлечён с главной страницы OdbcCommand Class. Чему же он учит, если не прикладывать к нему каких-либо комментариев? Если вы ответили ничему, то это очень плохо, и в первую очередь для вас. Даже несмотря на включённую мной ссылку на OdbcCommand Class имеет смысл провести цепь рассуждений. Она может включать в себя множество пунктов, но главное заключается даже не в этом, а в том, что осмысление вообще происходит. Очень часто люди говорят, что программирование развивает логическое мышление. В дословном переводе подобное значит развитие осмысляющего мышления. В конечном итоге понимание можно обозначить как построение некой работающей модели в своём сознании. Программа работает так, а вы думаете, что она всё делает иначе, но если две этих модели совместимы, то стаёт уже не важно кто как думает, главное как в результате этих действий идёт взаимодействие пользователя и вашей программы. На мой взгляд, вы можете представить себе две ситуации.
Запомните это условное сокращение - DAD, так как для успешного программирования оно является, чуть ли не ключевым понятием. В нашей стране ещё очень любят употреблять выражение содрать код. Вам, прежде всего, нужно будет научиться, не просто выдирать нужные куски кода, но и уметь их правильно хранить, а при случае и использовать. В связи с этим возникает ещё одно понятие - программные наработки. Процесс наращивания наработок протекает в три этапа.
Как видите всё просто, а просто то, что гениально. Следовательно, данный способ программирования можно отнести к разряду гениального. Впрочем, им не так то легко научиться пользоваться. Вполне возможно, что понадобятся вспомогательные средства. О них я поговорю в следующих выпусках.
Sergey R. Sergin Чесслово, коллега, только такие слова и приходят на ум по прочтении последнего номера рассылки, что не далее как сегодня упал мне в ящик. Такую бесноватую реакцию у меня вызвала статья, в которой описываются потуги по использованию стилей Windows XP в приложениях, создаваемых в Visual Studio NET. Позволю себе предположить, что программист, пишущий в указанной среде с высокой степенью вероятности пользуется C# или C++ и пишет свои программы для исполнения в .NET (дот НЭТ). Каждый сам выбирает себе язык, однако замечу, что языки .NET практически равноценны, то есть то, что можно написать на одном, так же легко кодируется и на всех остальных. Вот когда я пользовался Visual Studio 6.0 Enterprise Edition, тогда мне действительно больше нравился Visual C++ 6.0, так как он выполнен по стандарту ISO/IEC 14882 (Standart for the C++ Programming Language), впрочем Visual Basic 6.0 тоже заслуживал самого пристального внимания, хотя бы для общего развития. Сейчас же разницы почти никакой, только записывается разными грамматическими конструкциями, то есть, часть перекочевала от VB 6.0, а часть от VC++ 6.0. Кстати, С#.NET некоторыми деталями уж очень сильно напоминает гибрид этих двух языков. Стало быть, вся проблема использования стилей Windows XP заключается в двух шагах: 1. В методе main нужно сделать вызов Application.EnableVisualStyles(); ну или Application->EnableVisualStyles(); 2. В дизайнере форм надо для элементов типа кнопок, списков и так далее нужно выбрать свойство FlatStyle равным System. Всё! Больше ничегошеньки делать не надо, всё уже будет сделано за нас. Хорошо, такой способ действительно имеет полное право на существование. Более того, является прекрасным образчиком решения одной задачи несколькими способами. Мастер Windows Application в Visual Basic.NET, не добавляет автоматически функцию Main, то есть при декомпиляции в вы её увидите, а в коде нет, поэтому вам придётся скопировать в тело класса вашей главной формы следующий код.
Имя Form1 измените в зависимости от настроек вашего проекта. В других языках проблем с Main не возникнет, так как она дана сразу. Данная рекомендация достоверно применима к Visual Studio NET 2003. В Visual Studio NET 2005 и этого делать не надо, там уже включены стили по-умолчанию, а свойства элементов настроены так, чтобы сразу выглядеть как надо. Зачем людям головы морочить - не понимаю! Очень ценное замечание, но данный пример лишь ставит стили свойства FlatStyle в значение System, чтобы вам не пришлось делать этого вручную. Манифест же загружается самостоятельно, так как имеет такое же имя, как исполняемый файл. Более того, работа с манифестом позволяет изменять его на ходу, без перекомпиляции. Плюс к этому стоит отметить, что его изначальное предназначение несколько иное, а специалистами корпорации Microsoft приведено лишь как учебное пособие. PS. Если в каком месте допустил ошибку в синтаксисе, не надо сразу придираться к мелочам. Я уже и забыл что такое жизнь программиста без автозавершения ввода, без рефакторинга и дизайнера классов. В прошлой рассылке код странным образом исказился, поэтому я приведу его ещё раз в несколько другой вариации. Если вы не используете манифест, то можете удалить проверку на его существование в функции FormatForWinXP.
Вот следующий код позволяет использовать класс Manifest для установки всех свойств FlatStyle элементов управления в стиль System. ВАЖНО: перед использованием удалите проверку на существования файла .manifest, так как в данном случае создавать такой файл не будет никакой необходимости.
Напоминаю, что это всего лишь учебный пример, и для многих действительно легче было бы вручную поставить свойство FlatStyle на System. Но смотрите на это, как на возможность ознакомится с манифестом, рекурсивными функциями и проходом по всем элементам управления находящимся в форме. Для других языков всё делается точно также, теми же функциями, только грамматика будет другой. Приводить её не буду, так как, на мой взгляд, тема по данному вопросу исчерпана. Безусловно, в будущем я буду использовать все языки Visual Studio.NET, однако для столь незначительных примеров в этом нет необходимости. Об их грамматических различиях вы можете узнать, щёлкнув по ссылке на MSDN Language Equivalents. Если у вас есть какие-то конструктивные комментарии на подобие тех, что написал Sergey R. Sergin, то пишите, не стесняйтесь. Только не забывайте о том, что на письма, проходящие через subscribe.ru накладываются некоторые ограничения. Особо актуальные я опубликую в этой рассылке. Постарайтесь грамотно излагать вашу точку зрения, то есть если вам что-то не нравится, то не спешите говорить, что <всё плохо сделано, и все люди:>, а напишите, как бы вы поступили в подобном случае. Если же вам просто хочется поговорить о программировании в указанных системах, то подписывайтесь на Лист: Обсуждение VS.Net 2003, MSOffice 2003, и пишите в него о том, что вас в данный момент интересует, так как авторами статей в листах являетесь именно вы. Для подписки на интересующие рассылки используйте таблицу Подписка.
|
В избранное | ||