Владимир Волков - Программирование для карманных компьютеров
- Название:Программирование для карманных компьютеров
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Волков - Программирование для карманных компьютеров краткое содержание
Эта книга предназначена для того, чтобы читатель смог быстро научиться создавать мощные и эффективные приложения для наладонных компьютеров Pocket PC. Рынок программ для карманных компьютеров сейчас бурно развивается, и именно в этой отрасли программист-одиночка может успешно соперничать с большими корпорациями, которые создают программное обеспечение. Прочитав эту книгу, читатель сможет уверенно и быстро разрабатывать достаточно сложные приложения для Pocket PC. Огромное количество разнообразных примеров позволит быстро совершенствоваться и развиваться, обогащая свой опыт работы.
Книга предназначена для начинающих программистов.
Программирование для карманных компьютеров - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Код простейшего XML-файла показан в листинге 6.4.
Листинг 6.42
Первая строка является описанием XML-документа. Она позволяет указывать версию XML и кодировку, в которой записан документ. Затем следует тег с именем Y2005. Этот тег состоит из открывающей () и закрывающей () частей. Внутри тега Y2005 расположены теги с именем Date. Все три тега Date не пустые, поэтому тоже имеют открывающую и закрывающую часть. Внутри тегов Date вложены теги Index. Первые два тега Index пустые, они состоят из одной части, которая одновременно открывает и закрывает этот тег. Внутри тега Index в первых двух случаях записано значение value. Значения, записанные внутри скобок тега, называются атрибутами. Любой тег может иметь любое количество атрибутов, но только одно значение. Значение записывается между открывающей и закрывающей частью тега.
Любой XML-документ должен начинаться с одного тега, который называется корневым тегом. В нашем случае корневым тегом является тег Y2005.
Что нам надо хранить в нашем XML-документе? Это должна быть информация о дате, для которой мы выполняем хронометраж, о категории работы, о времени начала работы, о времени ее окончания и примечания к каждой записи, если они необходимы. Структура нашего XML-файла приведена в листинге 6.5.
Листинг 6.5Заголовочная часть:
Корневой тег:
Столько тегов Date, сколько дней мы будем контролировать:
Столько тегов Index, сколько отрезков времени мы учтем за день:
…
В каждом теге Date есть два атрибута. Атрибут value несет в себе дату, а Cnt – количество записей за день. В каждом теге Index есть четыре атрибута. В атрибуте Category указывается категория занятия, в атрибуте StartOf – время начала, в атрибуте EndOf – время окончания, а атрибут Note предназначен для хранения примечания.
Файл с такой структурой должен быть создан при первом запуске программы, прочитан и отредактирован при каждом последующем запуске.
Упражнение 6.2 (продолжение)
17. При запуске нашего приложения необходимо проверить, существует ли файл 2005.xml, в котором записаны результаты контроля времени, и файл Category.xml, в котором содержится список категорий. Если данные файлы не существуют, то их надо создать. Если файлы все еще существуют, то их нужно загрузить. Эти операции будут проводиться в обработчике события загрузки основной формы приложения. Но перед этим в класс формы нужно добавить две переменные. В окне Solution Explorer нужно выделить файл Form1.vb и из контекстного меню выполнить для этого файла команду View Code. Затем в самое начало кода нужно добавить строки, приведенные в листинге 6.6.
Листинг 6.6Public Class Form1
Inherits System.Windows.Forms.Form
Friend WithEvents ListView1 As System.Windows.Forms.ListView
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
\'Добавленные переменные
Dim D As DateTime
Dim dirStr As String18. Теперь можно создать процедуру обработчика события загрузки формы, код которой приведен в листинге 6.7. Листинг 6.7
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
\'Если файл с данными отсутствует в текущем каталоге, мы его создаем, для
\'этого сначала получаем полный путь каталога, в котором расположена
\'программа, в строковую переменную dirStr
dirStr = IO.Path.GetDirectoryName_
(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)
\'Проверяем, есть ли файл c заданным именем по полученному пути
If Not System.IO.File.Exists(dirStr + «\2005.xml») Then
\'Если файла нет – создаем его
\'Создаем экземпляр XmlDocument
Dim myxmlDoc As New Xml.XmlDocument
\'Создаем корневой тег и добавляем его к документу
Dim oROOT As Xml.XmlElement = myxmlDoc.CreateElement(«Y2005»)
myxmlDoc.AppendChild(oROOT)
\'Получаем текущую дату в переменную myDate
Dim myDate As Date = Date.Now
myDate = DateAdd(DateInterval.Day, – 1, myDate)
\'Заполняем файл тегами Data от сегодняшнего дня до конца текущего года
While Not myDate.ToShortDateString = «31.12.2005»
myDate = DateAdd(DateInterval.Day, 1, myDate)
Dim oData As Xml.XmlElement = myxmlDoc.CreateElement(«Data»)
oROOT.AppendChild(oData)
Dim oValue As Xml.XmlAttribute = _ myxmlDoc.CreateAttribute(«value»)
Dim oIndex As Xml.XmlAttribute = _ myxmlDoc.CreateAttribute(«Cnt»)
oValue.InnerText = myDate.ToShortDateString
oIndex.InnerText = «-1»
oData.SetAttributeNode(oValue)
oData.SetAttributeNode(oIndex)
End While
\'Создаем заголовочную часть XML файла
Dim myPI As Xml.XmlProcessingInstruction = _
myxmlDoc.CreateProcessingInstruction_
(«xml», "version= 1.0 encoding=\'windows-1251 ")
myxmlDoc.InsertBefore(myPI, myxmlDoc.ChildNodes(0))
\'Сохраняем созданный документ
myxmlDoc.Save(dirStr + «\2005.xml»)
End If
\'Если файл со списком категорий отсутствует в текущем каталоге, мы его
\'создаем с пятью категориями Work1, Work2, Work3, Misc, Trash
If Not System.IO.File.Exists(dirStr + «\Category.xml») Then
If Not System.IO.File.Exists(dirStr + «\Category.xml») Then
Dim myxmlDoc As New Xml.XmlDocument
Dim oROOT As Xml.XmlElement = myxmlDoc.CreateElement(«Categoty»)
myxmlDoc.AppendChild(oROOT)
Dim oWork1 As Xml.XmlElement = myxmlDoc.CreateElement(«Work1»)
oROOT.AppendChild(oWork1)
Dim oWork2 As Xml.XmlElement = myxmlDoc.CreateElement(«Work2»)
oROOT.AppendChild(oWork2)
Dim oWork3 As Xml.XmlElement = myxmlDoc.CreateElement(«Work3»)
oROOT.AppendChild(oWork3)
Dim oMisc As Xml.XmlElement = myxmlDoc.CreateElement(«Misc»)
oROOT.AppendChild(oMisc)
Dim oTrash As Xml.XmlElement = myxmlDoc.CreateElement(«Trash»)
oROOT.AppendChild(oTrash)
Dim myPI As Xml.XmlProcessingInstruction = _
myxmlDoc.CreateProcessingInstruction_
(«xml», "version= 1.0 encoding=\'windows-1251 ")
myxmlDoc.InsertBefore(myPI, myxmlDoc.ChildNodes(0))
myxmlDoc.Save(dirStr + «\Category.xml»)
End If
D = DateTime.Now
Label1.Text = System.DateTime.Today.ToShortDateString
\'Вызываем процедуру загрузки данных в ListView
Data_Load(System.DateTime.Today.ToShortDateString)
End SubЧтобы создать и сохранить новый XML-документ, мы воспользовались классом XMLDocument, который позволяет представить существующий XML-документ в виде объекта с набором полей и методов для манипуляции этими полями. Он позволяет создавать и удалять элементы XML как по имени, так и по индексу, осуществлять поиск нужного элемента, заменять или дублировать элементы, сохранять измененный документ. Единственным недостатком этого класса является то, что документ полностью загружается в создаваемый объект. Поскольку на Pocket PC и файловая система, и оперативная память программы физически являются одним и тем же устройством, то просто происходит дублирование информации на время работы с документом.
19. Процедура загрузки данных для текущего дня в компонент ListView приведена в листинге 6.8.
Листинг 6.8Private Sub Data_Load(ByVal MyDate As String)
\'Открываем файл, для это сначала получаем полный путь каталога,
\'в котором расположена программа в строковую переменную dirStr
dirStr = IO.Path.GetDirectoryName_
(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)
\'Создаем экземпляр объекта XmlTextReader
Dim xmlrdrMy As New Xml.XmlTextReader(dirStr + «\2005.xml»)
Dim MyCount, MyIndex As Integer
Dim lvItem As ListViewItem
\'Не реагируем на пробелы и управляющие символы
xmlrdrMy.WhitespaceHandling = xmlrdrMy.WhitespaceHandling.None
\'Переходим к содержимому, пропуская заголовочную часть
xmlrdrMy.MoveToContent()
\'В цикле считываем значения из файла, добавляем новую строку в ListView
\'для каждого тега Index и копируем значения атрибутов тега Index в
\'соответствующие поля записи ListView
ListView1.Items.Clear()
ListView1.Refresh()
While Not xmlrdrMy.EOF
If xmlrdrMy.Name = «Data» Then
If xmlrdrMy.GetAttribute(«value») = MyDate Then
MyIndex = CInt(xmlrdrMy.GetAttribute(«Cnt»))
For MyCount = 0 To MyIndex – 1
xmlrdrMy.Read()
lvItem = New ListViewItem(xmlrdrMy.GetAttribute(«Category»))
Читать дальшеИнтервал:
Закладка: