• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Автозаполнение заголовка в Illustrator

  • Автор темы Guest
  • Дата начала
G

Guest

Всем привет. Есть следующая задача: нужно сделать так, чтоб в Illustrator пользователю не нужно было заполнять самому все поля заголовочного блока, когда что либо изменяется. Скрипт должен сам звводит всю необходимую инфу: имя пользователя (редактора), дата создания документа и изменения, путь и имя файла.

<!--shcode--><pre><code class='vb'>Option Explicit
Private Sub Command1_Click()

Dim myApp As New Illustrator.Application

Dim myFileSystemObject As New FileSystemObject
Dim myFileName, myPath, myFile, myDate, myRevised, myEditor
If myApp.Documents.Count > 0 Then
myFileName = myApp.Documents(1).Name
myPath = myApp.Documents(1).Path

Set myFile = myFileSystemObject.GetFile(myPath)
myDate = MonthName(Month(myFile.DateCreated))
myDate = myDate & " " & Day(myFile.DateCreated)
myDate = myDate & ", " & Year(myFile.DateCreated)
myRevised = MonthName(Month(myFile.DateLastModified))
myRevised = myRevised & " " & Day(myFile.DateLastModified)
myRevised = myRevised & ", " & Year(myFile.DateLastModified)

myEditor = GetUserName()

On Error Resume Next
myApp.Documents(1).TextArtItems("titleblock-file").Contents = myFile
myApp.Documents(1).TextArtItems("titleblock-path").Contents = myPath
myApp.Documents(1).TextArtItems("titleblock-date").Contents = myDate
myApp.Documents(1).TextArtItems("titleblock-revised").Contents = myRevised
myApp.Documents(1).TextArtItems("titleblock-editor").Contents = myEditor
End If
End Sub[/CODE]

Возникает, видимо, проблема с библиотекой. Выскакивает ошибка 53 - файл не найдет.
А также при кампиляции можно увидеть, что Illustrator.Application = <object variable or with block variable not set>

Помогите, пожалуйста.
<table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
<FONT color='#ffffff' size='+3'> ! </font>
</td><td align="midle" valign='top' style='background:#fff;'>Используйте теги оформления кода.</td>[/tr]</table>
 
H

hosm

не знаю насчет Illustrator, что там с библиотеками - если подключили, должен объект создаваться в процессе выполнения и все нормально найтись.
Eсли проблема в коде, посмотрите хотя бы значение myPath в процессе выполнения - может, неправильно работает, если файл не сохранен?
(может, добавьте на будущее обработчик ошибок с указанием строки ошибки :KillMe: ).
 
G

Guest

Вот в том-то и дело, что в myFileName, myPath он все заносит.
на Set myFile = myFileSysObject.GetFile(myPath) выдает ошибку, что файл не найден.

А все, что связано с myApp, myFileSysObject игнорит. :KillMe:
 
H

hosm

А так?
Код:
Dim myFileSystemObject As New Scripting.FileSystemObject
или
Код:
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
 
G

Guest

А счас ничего не изменилось. кстати, по какой-то причине он не может распознать идентификатор FileSystemObject
 
H

hosm

А посмотрите внимательно на значение myPath. может, путь относительный, не там ищет?
 
G

Guest

myPath = "E:\temp\". Здесь же лежит файл illustrator.
 
H

hosm

э, а где имя файла? Может так: myPath + myFileName ?
myPath он все заносит. ...
А все, что связано с myApp, myFileSysObject игнорит.
не поняла, по коду же myPath у Вас получается из myApp. Т.е. myApp уже должен создаваться нормально...
Мне кажется, что и myFileSysObject создается, но просто не находит в нужном месте файл.


Добавлено: или не +, а &: myFileSysObject.GetFile(myPath & myFileName)
 
T

Tanya

не знаю насчет Illustrator, что там с библиотеками - если подключили, должен объект создаваться в процессе выполнения и все нормально найтись.
Точно. Должна найтись, если подключена. Если не подключена, но зарегистрирована на компе, то нужно использовать для создания экземпляра приложения - CreateObject() или, для получения экземпляра открытого приложения GetObject(). Если библиотека не существует / не зарегистрирована - будет ошибка.

Дальше - мысли вслух))) Обычно, в строке такого вида
Dim myApp As New Illustrator.Application

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

myApp.Visible = True

Соответственно после создания myApp.Documents.Count = 0. Значит код, в принципе, не сможет никогда выполниться.
Без документов, при помощи new создаются экземпляры Excel, Word, Photoshop, Corel.
Но может в твоем случае Illustrator создается с документом? Тогда все мои мысли вслух в топку ))
 
G

Guest

:ya_lamo:
Да, действительно, нужно прописать и имя к пути. Так файл находит. Спасибо большое.

Счас попробую довести до ума, чтоб в иллюстратор всю инфу заносило.

Спасибо.

Не пропадайте :rolleyes:



Добавлено: А если в иллюстраторе каждый слой имеет имя, и в каждом слое по одному текстовому блоку, куда он должен выводить инфу (переменные myPath, myFile),
то как правильно обратиться к этому текстовому блоку?

Неправильно: myApp.Documents(1).Layers("titleblock-file").TextArtItems(1).Contents = myFile

Добавлено: Вопрос снят )))
 
G

Guest

:)
Хочу добиться того, чтоб данный скрипт работал не только в VB6 и Illustrator 10, но и в Illustrator CS2 и Visual Studio 2005.]
В связи с этим есть несколько вопросов:
1. Существуют ли функции получения даты и времени последнего изменения файла и создания файла? Функция FileDateTime - это функция последнего обращения к файлу, верно?
2. В данной задаче корректно будет использовать вместо FileSystemObject System.Object() или FileIO.FileSystem()?

Буду благодарна за помощь
 
H

hosm

1. Существуют ли функции получения даты и времени последнего изменения файла и создания файла? Функция FileDateTime - это функция последнего обращения к файлу, верно?
Функций, кроме FileDateTime, не знаю, есть методы для получения нужной инфы.
А FileDateTime - вроде выдает дату и время последнего изменения файла, а не обращения к нему (если файл не изменялся, то эта дата будет датой создания).
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!