Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2013, 11:47   #1
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию Где хранить значения полей формы по умолчанию?

Допустим, есть форма с полем ввода (TextBox). По умолчанию в нём какой-то текст. Можно ли хранить его во внешнем файле, чтобы можно было вносить модификации в текст без изменения исходного кода (иными словами, не хардкодить)?

Таких полей на формах может быть много.

Хотелось бы какое-то элегантное решение придумать, вроде конфигурационного файла.

Последний раз редактировалось cw_o; 06.03.2013 в 11:49.
cw_o вне форума Ответить с цитированием
Старый 06.03.2013, 12:30   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

cw_o, предложу 4 варианта:
  1. можно хранить данные в обычном текстовом файле (расширение "txt");
  2. можно хранить в Excel-книге - в Excel-книгу удобнее вносить данные, чем в текстовый файл;
  3. программа "Word" имеет переменные - в этих переменных можно хранить данные после закрытия программы "Word";
  4. можно помещать данные в реестр Windows.
Скрипт вне форума Ответить с цитированием
Старый 06.03.2013, 13:27   #3
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

1. В обычном текстовом файле не понятно, как различать, к какому контролу относится текст. Допустим там будут строки txt1="текст1". Надо во всём файле поискать txt1 получается.
2. В экселе можно сделать колонку с именами параметров (для txt1 и подобного). Но опять же искать текст по всем строкам.
3. Переменные, скорее всего, не подходят, потому что менять их нужно из исходников.
4. Не удобно для рядового юзера.

Назревает идея, хранить настройки в XML-формате.
cw_o вне форума Ответить с цитированием
Старый 06.03.2013, 13:40   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
cw_o:
1. В обычном текстовом файле не понятно, как различать, к какому контролу относится текст. Допустим там будут строки txt1="текст1". Надо во всём файле поискать txt1 получается.
2. В экселе можно сделать колонку с именами параметров (для txt1 и подобного). Но опять же искать текст по всем строкам.
макрос будет искать, а не человек.


Код:
cw_o: 3. Переменные, скорее всего, не подходят, потому что менять их нужно из исходников.
что такое исходники?


Цитата:
cw_o: 4. Не удобно для рядового юзера.
макрос вносит изменения в реестр Windows.

Последний раз редактировалось Скрипт; 06.03.2013 в 13:43.
Скрипт вне форума Ответить с цитированием
Старый 06.03.2013, 13:45   #5
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Да, макрос будет искать. С точки зрения процессорного времени не слишком ли затратно?
Идея такая - чтобы человек, не разбирающийся в коде VBA и других тонкостях, мог поменять текст, который он видит в форме при первом ее запуске.
cw_o вне форума Ответить с цитированием
Старый 06.03.2013, 13:47   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от cw_o Посмотреть сообщение
3. Переменные, скорее всего, не подходят, потому что менять их нужно из исходников.
Действительно, небольшая сложность есть, но не такая как вам кажется.
Цитата:
Сообщение от cw_o Посмотреть сообщение
4. Не удобно для рядового юзера.
Чем? Тем более, что в VBA есть встроенные функции, простые как двери, для сохранения в реестр и чтения из него. Пример из моего опыта:
Код:
'Константы
Private Const REGAPPNAME = "ViterAlex"
Private Const REGSECTION = "ImageGallery"

Public Sub ReadSettings()
  'Чтение предыдущего состояния ленты
  ImageFolderPath = GetSetting(REGAPPNAME, REGSECTION, "ImageFolderPath", CurDir)
End Sub

Public Sub WriteSettings()
  'Запись состояния ленты
  SaveSetting REGAPPNAME, REGSECTION, "ImageFolderPath", ImageFolderPath
End Sub
Вызываете эти функции при открытии формы и при закрытии и будет вам счастье. Что здесь сложного?
Цитата:
Сообщение от cw_o Посмотреть сообщение
Назревает идея, хранить настройки в XML-формате.
Совсем не очевидна. Можно заморочиться, а смысл?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 06.03.2013, 13:53   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
cw_o: Да, макрос будет искать. С точки зрения процессорного времени не слишком ли затратно?
я думаю, будет работать одну - две секунды.


Цитата:
cw_o: Идея такая - чтобы человек, не разбирающийся в коде VBA и других тонкостях, мог поменять текст, который он видит в форме при первом ее запуске.
у меня два варианта:
  1. пользователь вносит данные в Excel-книгу;
  2. вы создаёте специальную форму, через которую пользователь делает настройки. Данные заносятся в этом случае
    1. в текстовый файл, т.к. в данном случае разумнее использовать текстовый файл, чем использовать программу "Excel";
    2. или в реестр Windows - в этом случае на дисках не будет каких-то файлов. Ведь текстовый файл должен же где-то храниться;
    3. или занести данные в переменные программы "Word". Не знаю, что лучше: в реестр Windows занести данные или в переменные программы "Word".

Последний раз редактировалось Скрипт; 06.03.2013 в 13:58.
Скрипт вне форума Ответить с цитированием
Старый 06.03.2013, 13:55   #8
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

viter.alex
Сохранением в реестр, конечно, можно воспользоваться. Но насколько я понимаю, при самом первом запуске макроса значение не будет браться из реестра, потому что никто туда его не прописал)
Хранить настройки в XML - вроде стандартная практика в программировании. Вот например:
Код:
<?xml version="1.0" encoding="utf-8"?>
<settings>
	<Glossary Path="D:\\Glossary.doc" />
</settings>
правда парсить XML средствами VBA я еще не пробовала.
cw_o вне форума Ответить с цитированием
Старый 06.03.2013, 13:57   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от cw_o Посмотреть сообщение
viter.alex
Сохранением в реестр, конечно, можно воспользоваться. Но насколько я понимаю, при самом первом запуске макроса значение не будет браться из реестра, потому что никто туда его не прописал)
Можно задать значения по умолчанию Но я вижу, что вы настроены на работу с XML, не смею отговаривать
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 06.03.2013, 14:46   #10
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

А за идею с реестром спасибо. Так можно последние введённые значения сохранять. Но для хранения значений по умолчанию всё же нужен конфигурационный файл.
cw_o вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
где хранить данные принято? yuran111 Общие вопросы Delphi 36 12.05.2011 00:23
как и где хранить изображения? kate158 БД в Delphi 9 20.08.2010 16:37
Определить конструктор для инициализации полей по умолчанию ArtiSoft Общие вопросы C/C++ 10 20.12.2009 18:42
При удалении записей значения полей с type:=Autoincrement (т.е+) в оставшихся полей не изменяются kenta БД в Delphi 2 29.10.2009 08:28
Заполнение полей по умолчанию matroskin24 БД в Delphi 14 12.01.2009 18:22