[CDR X5-X8] Макрос создания баннеров с люверсами

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

Creative

Топикстартер
15 лет на форуме
Сообщения
296
Реакции
3
Я написала макрос для своих нужд. Вкратце: он создает баннеры с припусками на загиб и расставляет по периметру люверсы. Баннеры создаются пакетно, считыванием Высоты и Ширины из текстового файла.
Сделан и протестирован на Х7 в Win7 64-bit (правда, пока только мною и на одной машине).
Его работа меня устраивает на 99%.
Не мог бы кто-нибудь в свободное время посмотреть работу макроса и его код и помочь мне кое с чем разобраться?
У меня пока вопрос:
Почему при открытии формы, поля ввода через раз не заполняются дефолтными цифрами?

Архив лежит здесь:
Макрос "Баннеры с люверсами"
 
Последнее редактирование модератором:
Перенесите инициализацию формы значениями в код формы
Код:
Private Sub UserForm_Initialize()
  InputBleed.Text = DefaultBleed
  InputDistance.Text = DefaultDistance
  InputInterval.Text = DefaultInterval
  InputStretch.Text = DefaultStretch
  Repaint
End Sub
Можно убрать константы
Код:
Private Sub UserForm_Initialize()
  InputBleed.Text = 50
  InputDistance.Text = 25
  InputInterval.Text = 300
  InputStretch.Text = 30
  Repaint
End Sub
А в запуске оставьте только вызов формы
Код:
Sub Start()
    Main.Show
End Sub
Можно сохранять путь к текстовому файлу или другие данные в реестр - SaveSetting, GetSetting или прописывать в какой-нибудь файл и считывать их оттуда при инициализации
 
Последнее редактирование:
  • Спасибо
Реакции: master_Print и Creative
ну так, на всякий случай, замечу, что эта штука есть в поставке программы Х8 и далее и называется BorderAndGrommet.CorelExtension ...
не изобретаете ли вы велосипед?
ведь кроме того есть ещё
AP_EyeletMarking
люверсы с сигн форума
SignMaker

ваш гляну ... отпишусь
 
Последнее редактирование модератором:
@dastin, BorderAndGrommet у меня неактивно, так что я его никогда не видела.
AP_EyeletMarking у меня стоит, но меня не все в нем устраивает - захотелось своих настроек (мне например, хочется, чтобы он и рамку и вылеты рисовал, и люверсы были крестиками, а не кружочками).
Ну, и кроме того, самое главное, если я не ошибаюсь, AP_EyeletMarking обрабатывает за один раз один прямоугольник. Мой макрос за 2 минуты делает 40 болванок с загибами, рамками и люверсами. Вообще-то я его из-за этого делала. Я очень ленивая.
Про это пока не знаю , "люверсы с сигн форума, SignMaker".

А вообще я просто очень люблю программировать и готова эти велосипеды делать хоть каждый день. :)

@lev, у меня изначально макрос и был привязан жестко к файлу на диске, мне так удобнее. Выбор файла я сделала, чтобы отдать макрос другому дизайнеру и не вынуждать его поступать так же как я.
меня устраивает, что поле файла пустое, главное, чтобы дефолты заполнялись.
 
AP_EyeletMarking ... мне например, хочется, чтобы он и рамку и вылеты рисовал

Он на такое способен.

2018-07-25_16-22_AP EyeletMarking.jpg
 
@MrDesigner, я знаю, а мне вот нужно, чтобы у меня поле с вылетами было с заливкой, а внутренняя рамка - нет. И люверсы при этом стояли ВНУТРИ рамки загиба. И так 40 раз.
 
Сделан и протестирован на Х7 в Win7 64-bit
сначала то, что @lev прописал ... и от меня 5 копеек :)
сделано красиво, с размахом, почти Петергоф ... но это как вам нравится

в Х5 и голом Х6 не заведётся из-за конструкции
ActiveSelection.AlignAndDistribute
если не планируете допиливать для широкой публики - то и не стоит заморачиваться - VBA 7 only :)
...
Private Sub DrawCornerEyelets()
переменную VertCrossSet используете, а в Dim её не указали

Private Sub CloseMacros_Click()
Main.Hide
End Sub

Hide - т.е. вы форму скрыли, а в памяти она осталась висеть, выгружайте её
Unload Main
...
ну и в начало кода модуля и кода формы добавьте
Option Explicit ...чтобы вышло типа того
Код:
Option Explicit

Public Const DefaultInterval As Integer = 300
Public Const DefaultDistance As Integer = 25
Public Const DefaultBleed As Integer = 50
Public Const DefaultStretch As Integer = 30

Public Cross As Shape
Public CornerPoints As LRect
Public Stretch As Byte
Public Bleeds As Byte
Public Distance As Byte
Public Interval As Integer
Type LPoint
x As Double
y As Double
End Type
Type LRect
LB As LPoint
RT As LPoint
End Type


Sub Start()
    Main.Show
End Sub
 
  • Спасибо
Реакции: Creative
Ещё кое-что ...
вот этот саб можно изложить в следующей редакции:
Код:
Private Sub Create_Click()
        Optimization = True
        EventsEnabled = False

CreateBanners

        EventsEnabled = True
        Optimization = False
        ActiveWindow.ActiveView.ToFitPage
        ActiveWindow.Refresh
End Sub

это повысит скорость выполнения, уберёт мельтешение экрана во время исполнения макроса и приведет окно к виду Fit to Page по завершению
 
  • Спасибо
Реакции: Creative
@dastin,
сделано красиво, с размахом, почти Петергоф ... но это как вам нравится
Издеваетесь так или правда неплохо вышло? Мне важно знать, потому что я "драться люблю, но не умею".

в Х5 и голом Х6 не заведётся из-за конструкции
ActiveSelection.AlignAndDistribute
если не планируете допиливать для широкой публики - то и не стоит заморачиваться - VBA 7 only
Стоит, стоит! VBA 7 - это то, на чем я пишу в Х7, так?

А AlignAndDistribute лучше распилить на простые функции? Навскидку, как-то так? Или приличные люди делают это по-другому?
Код:
RealInterval =(CornerPoints.RT.x - CornerPoints.LB.x)/HorQuant
for i = 1 to HorQuant -1
HorCrossSet(i).CenterX = i * RealInterval
 
или правда неплохо вышло? Мне важно знать
что имелось в виду ... размер формы ... от души ... и тут же маленькие кнопочки с мелкими надписями ...
вот на скромном ноуте с 15 экранчиком - почти половину экрана
upload_2018-7-26_7-32-33.png

это ещё изменится, надеюсь, к тому же, когда надписи станут русскими - непременно придётся корректировать

VBA 7 - это то, на чем я пишу в Х7, так?
да ... в Х5 и начале Х6 вба был версии 6 ... затем по мере появления сервиспаков к Х6 вба начал менять версии и кое-что работающее прежде работать перестало ... или потребовало другого кода
ваш код будет работать с Х7 и далее - неважно х32 или х64 версии программы будут использоваться

Или приличные люди делают это по-другому?
главное делают :) а сделать можно разными путями ...

а зачем два раза?
а два раза ли? обратите внимание на то, что стоит после знака равно. Это не два раза, а туда и обратно
 
  • Спасибо
Реакции: Creative
ещё надо бы сказать, что вот это "прореживание" вбашных грядок на Х7 не закончилось, а напротив, продолжается.
Вот к примеру. известный, наверное, всем отчественным макрописателям @Sanchos, он же Санчо, он же А. Котиков, завязав с макросами,
тем не менее собирает отличия Х9 <=> Х8 <=> Х7
отличия Х9 от Х8 выглядит, несомненно, впечатляюще
Enum cdrFileVersion
Constants:
  • cdrVersion19 As Long=19
но на остальное стоит посмотреть и если станет интересно - то и поискать в сети по Corel VBA Object Model
 
Исправила AlignAndDistribute и переделала интерфейс. Может быть, так лучше будет? (Архив обновила в ресурсах.)
 
@Alter_Ego, Astra SignMaker может пакетно создать 40 баннеров с вылетами и люверсами?
 
Исправила AlignAndDistribute и переделала интерфейс.
Один исправлен, а второй остался - Х5 опять об него споткнулся ... он кстати и не нужен - и без него все хорошо
ещё кое-что в этом Private Sub DrawCross() поправил. И немного "пошалил" с формой и запоминанием положения окна ...
вот что вышло - теперь должно работать от Х5 и дальше
upload_2018-7-27_14-39-24.png


положу на полочку - а там на ваше усмотрение . Успехов!
 

Вложения

  • upload_2018-7-27_14-35-0.png
    upload_2018-7-27_14-35-0.png
    11.9 КБ · Просм.: 913
  • Спасибо
Реакции: Creative
@dastin, ничего себе ! Вот это я понимаю. Хоть буду знать как это делается. Утащила изучать.


@Alter_Ego, пакетно - это значит много зараз.
 
Утащила изучать.
а обновление не загрузилось отчего-то ... сейчас должно
по форме - вы группируете option button c другими элементами - но такой группе невозможно задать координаты - двигать приходится руками и на глаз - лучше использовать фреймы - тогда можно задать позицию как фрейма, так и отдельным элементам внутри фрейма
 
  • Спасибо
Реакции: Creative