Дополним нашу программу возможностью сохранять текст в файл, загружать ранее сохранённый текст и удалять текстовые файлы.
Для работы нам понадобится библиотека
Dialogs. Она содержит набор стандартных диалогов в котором есть выбор файлов. В основном окне проекта справа есть вкладка, где по умолчанию показаны все модули и процедуры нашего проекта. Правая нижняя вкладка называется
Libs. Открываем её, вам представится полный список доступных библиотек и ода из них, а именно
Core уже отмечена галочкой. Найдите в списке Dialogs и отметьте галочкой. Если такой библиотеки нет, то см.
http://www.cyberforum.ru/basic/thread1151745.html#post6062619, я там подсказал, как искать.
Далее объявляем все нужные переменные в
Globals. Переменные будут доступны из всех процедур нашей Активности (Аctivity)
Для доступности переменных из всех модулей ( если будут таковые), их надо объявлять в процедуре
Process_Globals
Visual Basic |
1
2
3
4
5
6
7
8
9
10
| Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim EditText1 As EditText
Dim fd As FileDialog
fd.FastScroll = True
fd.KeyboardPopUp = False
fd.FilePath = File.DirRootExternal 'Корневая папка SD карты
fd.FileFilter = ".txt" ' Фильтр, несколько типов через запятую ".jpg,.png"
End Sub |
|
Внимательно смотрите на код, если нет красных символов, то значит всё сделали правильно.
DirRootExternal - Корневая папка SD карты, доступна как для чтения, так и для записи любым приложениям.
DirAssets - Собственная папка программы, внутри .apk архива. Доступна только для чтения и только вашей программой. В неё мы поместили иконки при работе с дизайнером ( помните - папка Files?).
В виду того, что наша программа будет работать с картой памяти необходимо проверить при запуске её доступность. По аналогии с VB6, где есть процедура Form_Load() здесь есть процедура
Activity_Create(FirstTime As Boolean)
В неё и вставим код проверки
Visual Basic |
1
2
3
4
| If File.ExternalWritable = False Then
Msgbox("Нет доступа к записи на карту памяти.", "MyNotepad") ' Упс! надо выходить из программы
Activity.Finish 'Прекращаем работу программы
End If |
|
Внимание! Проверте в вашем эмулятре, есть ли поддержка SD карты? Иначе программа не запустится!
Тут же добавляем в программу пункты меню
Visual Basic |
1
2
3
4
| Activity.AddMenuItem3("Загрузить файл","mnuOpen",LoadBitmap(File.DirAssets,"1398157499_folder-open.png"),True) ' Adds menu
Activity.AddMenuItem3("Сохранить файл","mnuSave",LoadBitmap(File.DirAssets,"1398157588_save.png"),True) ' Adds menu
Activity.AddMenuItem3("Удалить файл ","mnuDel",LoadBitmap(File.DirAssets,"1398157685_file_delete.png"),True) ' Adds menu
Activity.AddMenuItem3("Новый/Очистить текст ","mnuNew",LoadBitmap(File.DirAssets,"1398157679_file_add.png"),True) ' Adds menu |
|
Уже можно запустить код на выполнение и проверить, как отображается меню в эмуляторе.
У вас может быть совсем по-другому, в зависимости от версии Андроид и размеров. Если меню не умещается целиком, возможно отображение только части рисунков, а остальное в виде текста.
Далее дописываем процедуры, которые обрабатывают действия, при выборе пунктов Меню
Visual Basic |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| Sub SaveStringExample
Dim EText As String
DateTime.DateFormat = "ddMMyyHHmmss"
now = DateTime.now
dt = DateTime.Date(now) ' файл вида 210414200150
EText = EditText1.Text
File.WriteString(File.DirRootExternal, dt & "_MyN.txt",EText)
ToastMessageShow("Сохранён файл - " & dt & "_MyN.txt", False)
End Sub
Sub ReadStringExample
Dim EText As String
ret = fd.Show("Посмотреть заметку", "Отменить", "Нет", "Да", Null)
If ret = -2 Then
EText = File.ReadString(File.DirRootExternal,fd.ChosenName)
EditText1.Text = EText
Else
ToastMessageShow("Загрузка " & fd.ChosenName & " отменена!", False)
End If
End Sub
Sub mnuOpen_Click
ReadStringExample
End Sub
Sub mnuSave_Click
SaveStringExample
End Sub
Sub mnuNew_Click
EditText1.Text =""
End Sub
Sub mnuDel_Click
ret = fd.Show( "Удалить файл", "Отменить", "Нет","Да", Null)
If ret = -2 Then
If File.Delete(File.DirRootExternal,fd.ChosenName) Then
ToastMessageShow("Удаление" & fd.ChosenName & " успешно!", False)
End If
Else
ToastMessageShow( "Удаление" & fd.ChosenName & " отменено!", False)
End If
End Sub |
|
Код процедур простой, кто пишет программы на Basic тому разобраться не сложно. Поясню принцип сохранения файла. Процедура
SaveStringExample
Генерирует имя файла из текущей даты и времени вида
210414200150_MyN.txt _MyN это как визитная карточка нашей программы. Преимущество этого подхода в быстром сохранении файла – нет надобности набирать имя файла в ручную.
Примечание! Переменные
now,dt,ret в коде светятся «красным». Формально это ошибка, мы их не задекларировали при помощи DIM. Но т.к. мы сразу после использования им присвоили значения, то они ошибку при компиляции не вызывают и так делать допустимо.
Для настройки различных параметров работы и совместимости в виде планшета и телефона есть на основной вкладке
Дизайнера форм кнопка
Add Variant. Добавляем 480х320, т.е планшетный вариант и растягиваем
EditText1 на всю ширину экрана.
Вот и весь код. Можно компилировать, собирать в режиме Релиз и пользоваться.
Готовый код не даю, пусть будет стимул вам для самостоятельного повторения.
Ну вот,
Блокнот написали. теперь очередь за
Paint. Ждите, в следующем уроке будем делать подобие Виндовской Рисовалки.