Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Замена <Embedded> на... <Embedded>!!! (Щас всё объясню.)
Замена <Embedded> на... <Embedded>!!!
as-masterДата: Пятница, 19 Сентября 2008, 09:09 | Сообщение # 1
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Есть внедренный файл (или файлы).
Из проекта сохраняется некоторый файл настроек или чего-то подобного.
И в этом файле, в том числе, нужно сохранить путь к внедренному файлу.

Что мы делаем при сохранении? Пишем примерно так:

string$='<Embedded>\file.ext'
rv=StrToFile(и т.д.)

В итоге в файл что запишется? Правильно, строка вида:

C:\Windows\Temp\MMBPlayer\file.ext

Но это у меня так, а факт ли, что у кого-то эта строка не выглядит вот так?

c:\Documents and Settings\User\Local Settings\Temp\MMBPlayer\file.ext

Значит, если открыть на этом компе файлик, сохраненный на моем компе,
то путь к файлу не будет найден. Отсюда следует, что в строку надо писать СРАЗУ так:

<Embedded>\file.ext

Значит, мне нужно найти в строке выражение C:\Windows\Temp\MMBPlayer\
и заменить его на <Embedded>\ Но как из программы узнать, как выглядит
это искомое выражение? Точнее, как программа узнает, ЧТО ей надо заменить на
<Embedded>\ если не известна временная папка? Что искать в строке? Дурдом...

Надеюсь, вопрос вам понятен? smile

Добавлено (19 Сентябрь 2008, 09:09)
---------------------------------------------
Кстати, если тупо писать переменную, НА КОТОРУЮ НУЖНО ЗАМЕНИТЬ,
как <Embedded>\, то на это выражение не заменится, а заменится опять на
абсолютный путь к временной папке. Это понятно. Поэтому заменяющую
переменную нужно задавать примерно так:

change$='<Emb' + 'edded>' + CHR(92)


Да пребудет с вами ММВ!
 
toizyДата: Пятница, 19 Сентября 2008, 10:30 | Сообщение # 2
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Это у тебя очень странная папка temp... у всех она обычно именно в доках и настройках лежит, а не в папке винды.

Чтобы определять системные папки и пути к ним, нужно использовать переменные окружения. В ММВ есть макросы, частично решающие проблему, но их в ММВ так много, что ничего толкового из них не слепишь.

<windows> <temp> <system>, выбирай на вкус... я бы взял <temp>


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Пятница, 19 Сентября 2008, 11:28 | Сообщение # 3
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (toizy)
Это у тебя очень странная папка temp

Ничего странного - я в настройках переменных сред винды обе переменные - TMP и TEMP назначил как C:\Windows\Temp\ - и так делаю не один я, а многие системщики так делают. Для чего? А туда лазить проще, и всё г-но собирается в одном месте. Тем более адрес временной папки по умолчанию находится в скрытой папке Local Settings...

А на вопрос ты не ответил. Я не могу использовать ни какие макросы пути, кроме <Embedded> - файлы у меня внедрены в проект... Ну да ладно - будем надеяться, что сохраненные файлы не станут переносить с одного компа на другой, а будут использовать на своем компе - тогда путь к временной папке будет оставаться неизменным.


Да пребудет с вами ММВ!
 
Alex3AДата: Пятница, 19 Сентября 2008, 12:23 | Сообщение # 4
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Ну для таких делов имеються слеши и прочие хитрости, к примеру что бы строка не обрабатывалась,
немного испортим ее <Em_bedded> , а затем если надо обработать починим.
 
toizyДата: Пятница, 19 Сентября 2008, 15:23 | Сообщение # 5
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Alex3A, кажецо, у него другая проблема.

Добавлено (19 Сентябрь 2008, 15:23)
---------------------------------------------

Quote (as-master)
не могу использовать ни какие макросы пути, кроме <Embedded>

Ну так кто ж запрещает скопировать нужные файлы из ембеддед в темп? А потом читай темп - есть файл, делай чо надо, нет файла - копируй в темп снова. К слову, задача вырвана из контекста. Исходные данные давай smile


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Пятница, 19 Сентября 2008, 15:45 | Сообщение # 6
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Исходные данные таковы.
В проекте имеются внедренные картинки.
Юзер при работе может вставлять их в свой документ, документ потом сохранять.

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

Поскольку юзер использовал картинки, внедренные в проект, то при сохранении пути к ним он и сохраняется не как строка, содержащая фразу '<Embedded>', а как строка, содержащая КОНКРЕТНЫЙ АБСОЛЮТНЫЙ путь.

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


Да пребудет с вами ММВ!
 
Alex3AДата: Пятница, 19 Сентября 2008, 18:37 | Сообщение # 7
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (as-master)
В проекте имеются внедренные картинки.

После закрытия проекта их там не будет!
Но никто не мешает скопировать их куда нибудь, пока проект работает.
Quote (as-master)
на другом компе картинки могут быть не найдены.

Копируй из <Embedded>' в срцдир, к юзеровому проекту, там не потеряються на любом компе.
 
as-masterДата: Пятница, 19 Сентября 2008, 21:49 | Сообщение # 8
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (Alex3A)
После закрытия проекта их там не будет!

Алекс, неужели ты думаешь, что я об этом не знаю?
Если бы мне можно было копировать - я бы так и сделал.
А точнее - я бы тогда СРАЗУ положил их в СурсДир.

Картинки там и не нужны, когда проект не работает.
А когда он запущен, то картинки становятся на месте.
Речь идет вовсе не об этом: в документе сохраняется
лишь путь к картинке, этот <Embedded>, но сохраняется
он в виде конкретного пути, который может оказаться
другим на другом компе..... Вот о чем речь.


Да пребудет с вами ММВ!
 
RushДата: Суббота, 20 Сентября 2008, 03:01 | Сообщение # 9
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (as-master)
Что мы делаем при сохранении? Пишем примерно так:
string$='<Embedded>\file.ext'
rv=StrToFile(и т.д.)

Можно так:

string$='<'+'Embedded>\file.ext'
rv=StrToFile(и т.д.)

 
as-masterДата: Суббота, 20 Сентября 2008, 10:32 | Сообщение # 10
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (Rush)
Можно так:

Вот, уже дельный ответ! Но конкретно так не получится, объясню, почему.
Я ведь заранее не знаю, будет ли в сохраняемом файле использоваться
внедренная картинка, либо юзер использует внешнюю картинку на своем компе.

В случае, если при открытии файла не будет найдена картинка, лежавшая
на компе юзера, программа просто напишет ему, что картинка вероятно была
перемещена или удалена.

Но в случае, если картинка использовалась внутренняя, из проекта, она не должна
быть не найдена!!!

А поскольку я заранее не знаю, что за путь будет к сохраняемой картинке, то и
не могу использовать предложенную тобой запись в чистом виде.

Может быть, тогда как-то вот так (здесь path$ - известный программе но неизвестный
нам путь к файлу):

file$=ExtractName(path$) + ExtractExt(path$)
checkpath$='<Embedded>\' + file$
If (checkpath$=path$) Then
  string$='<'+'Embedded>\' + file$
Else
  string$=path$
rv=StrToFile(и т.д.)


Да пребудет с вами ММВ!
 
RushДата: Суббота, 20 Сентября 2008, 11:33 | Сообщение # 11
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (as-master)
Может быть, тогда как-то вот так (здесь path$ - известный программе но неизвестный
нам путь к файлу):
file$=ExtractName(path$) + ExtractExt(path$)
checkpath$='<Embedded>\' + file$
If (checkpath$=path$) Then
string$='<'+'Embedded>\' + file$
Else
string$=path$
rv=StrToFile(и т.д.)

Именно так.
Можно даже немного короче:

file$=ExtractName(path$)+ExtractExt(path$)
If (path$=<Embedded>+file$) Then
sting$='<'+'Embedded>\\'+file$
Else
sting$=path$
End
rv=StrToFile(и т.д.)

Сообщение отредактировал Rush - Суббота, 20 Сентября 2008, 11:34
 
as-masterДата: Суббота, 20 Сентября 2008, 23:13 | Сообщение # 12
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Гуд! smile Тему можно считать закрытой.

Да пребудет с вами ММВ!
 
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Замена <Embedded> на... <Embedded>!!! (Щас всё объясню.)
  • Страница 1 из 1
  • 1
Поиск: