[CDR 2017-2021] Вставка имени файла в документ

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

MrDesigner

Топикстартер
15 лет на форуме
Сообщения
2 145
Реакции
805
Здравствуйте!
Сложно ли написать макрос вставки имени файла в открытом кореловском документе?

Выделяем объект (на скриншоте - голубой прямоугольник), нажимаем кнопку, в правом нижнем углу, допустим (для понимания отступы от краёв выделенного объекта обозначены, они не меняются), появляется имя файла (ИмяФайлаТут, Color - K30%, Size - 24 pt, Alignment - Right, Font - пусть будет Arial normal).

Untitled-1.jpg


Задача - подписывать баннеры.

Благодарю!
 
Есть уже готовый макрос с данной функцией - grommets

Ну а в принципе совсем не сложно получить в макросе имя файла

Код:
dim name$
name = ActiveDocument.FileName

Дальше выделяете имя файла из полного имени и рисуете строку там, где нужно
 
  • Спасибо
Реакции: MrDesigner
Это если файл хоть раз сохранялся, разумеется
 
  • Спасибо
Реакции: Karatau
Хм. Нашёл нечто похожее в сети. Макрос:

Код:
Sub InsertFileName()
   If ActiveShape Is Nothing Then Beep: Exit Sub
   ActiveLayer.CreateArtisticText _
      ActiveShape.RightX, _
      ActiveShape.BottomY - ActiveDocument.ToUnits(10, cdrMillimeter), _
      ActiveDocument.FullFileName, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
End Sub

Работает. При выделенном объекте имя файла располагается внизу справа.

А теперь, с вашего позволения, непосредственные вопросы:

1. Как сделать отступ текста справа и сверху от выделенного объекта?

2. Можно сделать так, чтобы имя файла писалось без полного пути?

3. Цвет шрифта как поменять?
 
1. Как сделать отступ текста справа и сверху от выделенного объекта?
Код:
ActiveLayer.CreateArtisticText _
      ActiveShape.RightX, _
      ActiveShape.TopY + ActiveDocument.ToUnits(10, cdrMillimeter), _
      ActiveDocument.FullFileName, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
 
  • Спасибо
Реакции: MrDesigner
3. Цвет шрифта как поменять?
Код:
Set txt=ActiveLayer.CreateArtisticText (_
      ActiveShape.RightX, _
      ActiveShape.BottomY - ActiveDocument.ToUnits(10, cdrMillimeter), _
      ActiveDocument.FullFileName, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment)
txt.Fill.UniformColor = CreateCMYKColor(0, 0, 100, 0)
 
  • Спасибо
Реакции: MrDesigner
@_MBK_, неправильно выразился.

Сейчас макрос ставит имя так:

01.jpg


Нужно так:

02.jpg


Т.е. сдвинуть влево на 150 мм и поднять вверх на 15 мм.

Спасиб!
 
Тогда то же самое как было но вместо DX DY нужные смещения
Код:
ActiveLayer.CreateArtisticText _
      ActiveShape.RightX-ActiveDocument.ToUnits(DX, cdrMillimeter), _
      ActiveShape.BottomY +ActiveDocument.ToUnits(DY, cdrMillimeter), _
      ActiveDocument.FullFileName, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
 
  • Спасибо
Реакции: MrDesigner
Код:
Set txt=ActiveLayer.CreateArtisticText (_
      ActiveShape.RightX, _
      ActiveShape.BottomY - ActiveDocument.ToUnits(10, cdrMillimeter), _
      ActiveDocument.FullFileName, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment)
txt.Fill.UniformColor = CreateCMYKColor(0, 0, 100, 0)
Ошибку пишет.

Сейчас рабочий код такой:

Код:
Sub InsertFileName()
   If ActiveShape Is Nothing Then Beep: Exit Sub
   ActiveLayer.CreateArtisticText _
      ActiveShape.RightX, _
      ActiveShape.BottomY - ActiveDocument.ToUnits(10, cdrMillimeter), _
      ActiveDocument.Name, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
End Sub
 
Итого. Работает, как нужно.

Код:
Sub InsertFileName()
   If ActiveShape Is Nothing Then Beep: Exit Sub
   ActiveLayer.CreateArtisticText _
      ActiveShape.RightX - ActiveDocument.ToUnits(150, cdrMillimeter), _
      ActiveShape.BottomY + ActiveDocument.ToUnits(15, cdrMillimeter), _
      ActiveDocument.Name, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
End Sub

С цветом шрифта что-то ошибку даёт. Как правильно?
 
Какую?
Еще так попробуй
Код:
Sub InsertFileName()
   If ActiveShape Is Nothing Then Beep: Exit Sub
   set txt=ActiveLayer.CreateArtisticText _
      ActiveShape.RightX - ActiveDocument.ToUnits(150, cdrMillimeter), _
      ActiveShape.BottomY + ActiveDocument.ToUnits(15, cdrMillimeter), _
      ActiveDocument.Name, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
   txt.Fill.ApplyUniformFill CreateRGBColor(255, 0, 0)
End Sub
 
Ну сделай без переносов в одну строку
Код:
Sub InsertFileName()
   If ActiveShape Is Nothing Then Beep: Exit Sub
   Set txt = ActiveLayer.CreateArtisticText(ActiveShape.RightX - ActiveDocument.ToUnits(150, cdrMillimeter), ActiveShape.BottomY, ActiveDocument.ToUnits(15, cdrMillimeter), ActiveDocument.Name, , , "Tahoma", 24, Alignment:=cdrRightAlignment)
   txt.Fill.ApplyUniformFill CreateRGBColor(255, 0, 0)
End Sub
 
  • Спасибо
Реакции: dastin
Вот такая конструкция работает:

Код:
Sub InsertFileName()
   If ActiveShape Is Nothing Then Beep: Exit Sub
   ActiveLayer.CreateArtisticText _
      ActiveShape.RightX - ActiveDocument.ToUnits(150, cdrMillimeter), _
      ActiveShape.BottomY + ActiveDocument.ToUnits(15, cdrMillimeter), _
      ActiveDocument.Name, , , _
      "Tahoma", 24, Alignment:=cdrRightAlignment
      ActiveShape.Fill.UniformColor.CMYKAssign 0, 0, 0, 30
End Sub

Она верна? Никакие другие объекты в макете перекрашены не будут?
 
Последнее редактирование:
Она верна? Никаких других объектов в макете исправлено не будет?
Это несколько заднепроходно
Смотри в чем дело - тебе надо установить цвет созданному объекту
А у тебя устанавливается активному шейпу. По счастливому стечению обстоятельств новосозданный объект становится активным но это сильно по индусски
С другой стороны работает и ладно
 
  • Спасибо
Реакции: MrDesigner
так получилось ... у Михаила лаконичней :)
Код:
Sub InsertFileName()
    Set s = ActiveShape
   If s Is Nothing Then Beep: Exit Sub
    Set txt = ActiveLayer.CreateArtisticText_
    (s.RightX - ActiveDocument.ToUnits(10, cdrMillimeter), _
    s.BottomY - ActiveDocument.ToUnits(40, cdrMillimeter),  _
    ActiveDocument.FileName, , , "Tahoma", 24, Alignment:=cdrRightAlignment)
    txt.Fill.UniformColor = CreateCMYKColor(0, 0, 0, 30)    '  так тоже можно  txt.Fill.UniformColor.CMYKAssign 0, 0, 0, 30
End Sub

ActiveShape.Fill.UniformColor.CMYKAssign 0, 0, 0, 30
выделенный объект зачем перекрашивать?
 
Последнее редактирование:
  • Спасибо
Реакции: MrDesigner и _MBK_