[CDR 2021] Обернуть в цикл

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76
Есть известное количество кнопок:
Private Sub ToggleButton1_Click()
End Sub
Private Sub ToggleButton2_Click()
End Sub
Private Sub ToggleButton3_Click()
End Sub

и т.п., а также их события:
If ToggleButton1.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\1.cdr", cdr)
End If

If ToggleButton2.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\2.cdr", cdr)
End If

как это можно обернуть в цикл, чтобы не писать длинную простыню?

примерную форму прилагаю, но пиктограмм будет в разы больше.
SharedScreenshot.jpg
 
  • Спасибо
Реакции: izrukvruki

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
31 065
Реакции
10 224
Никак
Я же правильно понимаю, вам хочется один универсальный обработчик на все кнопки?
Можете написать простенький макрос генерирующий длинную простыню если все обработчики однотипные
 
  • Спасибо
Реакции: mnemonix

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76
У меня он сейчас есть, но хотелось бы сделать изящнее, что ли.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
31 065
Реакции
10 224
Возможно что заднепроходный способ и существует (например кликать одну кнопку и отслеживать координаты), но это, как минимум, неверно идеологически
А вдруг вам придется в каждой кнопке что-то подправлять, а у вас один код на все
 

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76
Да, как раз не хотелось, опять же хочу их разделить по темам/вкладкам multipage, будут пиктограммы, логотипы, имена и адреса производителей. Потому и хочется унифицировать, а не делать скрипт для скрипта.
 

~RA~

10 лет на форуме
Сообщения
9 960
Реакции
2 846
Я сейчас набросаю, так как ни бейсика, ни корела я не знаю, а вы разгребите.
Создать класс "кнопка" и в конструкторе передавать разные параметры.
Создать метод, возвращающий объект "кнопка" и опять же передавать в него параметры.
Про фабрики и пр. наверное будет совсем неуместно.
 
  • Спасибо
Реакции: mnemonix

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
31 065
Реакции
10 224
Создать класс "кнопка" и в конструкторе передавать разные параметры.
Создать метод, возвращающий объект "кнопка" и опять же передавать в него параметры.
Про фабрики и пр. наверное будет совсем неуместно.
Обрати внимание на название обработчиков
Ты их как будешь на лету компилировать из текста при конструировании класса? ;)
Хотя как номинант на извращенное решение попрет '))'
 

Gad

Сообщения
2 781
Реакции
1 316
А зачем вообще такие сложности? Могу назвать как минимум 2 способа получить подобное вообще без макросов/панелей...
 
  • Спасибо
Реакции: mnemonix

~RA~

10 лет на форуме
Сообщения
9 960
Реакции
2 846

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76
минимум 2 способа получить подобное вообще без макросов/панелей
Панели нужны, т.к. всегда вставляется несколько элементов нужного размера/типа/цветности.
 

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76
именем файла, который цифра
Сейчас
Private Sub ToggleButton1_Click()
End Sub
около 50 шт., так как и обработчиков событий If ToggleButton1.Value = True , соответственно, названий файлов, руками можно, но нравится красивый код, а не в лоб, хотя и так работает.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
31 065
Реакции
10 224

~RA~

10 лет на форуме
Сообщения
9 960
Реакции
2 846

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
31 065
Реакции
10 224
Тогда запхать имена в массив и оттуда в цикле дёргать по индексу.
Кого за что дергать и в какой момент?
Обработчики уже должны быть скомпилированы с такими названиями '))'
 

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76
Вот первоначальный работающий код, согласитесь - громоздко:

Код:
Private Sub ToggleButton1_Click()
End Sub
Private Sub ToggleButton2_Click()
End Sub
Private Sub ToggleButton3_Click()
End Sub
Private Sub ToggleButton4_Click()
End Sub
Private Sub ToggleButton5_Click()
End Sub
Private Sub ToggleButton6_Click()
End Sub
Private Sub ToggleButton7_Click()
End Sub
Private Sub ToggleButton8_Click()
End Sub
Private Sub ToggleButton9_Click()
End Sub
Private Sub ToggleButton10_Click()
End Sub
Private Sub ToggleButton11_Click()
End Sub
Private Sub ToggleButton12_Click()
End Sub
Private Sub ToggleButton13_Click()
End Sub
Private Sub ToggleButton14_Click()
End Sub
Private Sub ToggleButton15_Click()
End Sub
Private Sub ToggleButton16_Click()
End Sub
Private Sub ToggleButton17_Click()
End Sub
Private Sub ToggleButton18_Click()
End Sub
Private Sub ToggleButton19_Click()
End Sub
Private Sub ToggleButton20_Click()
End Sub
Private Sub ToggleButton21_Click()
End Sub
Private Sub ToggleButton22_Click()
End Sub
Private Sub ToggleButton23_Click()
End Sub
Private Sub ToggleButton24_Click()
End Sub
Private Sub ToggleButton25_Click()
End Sub
Private Sub ToggleButton26_Click()
End Sub
Private Sub ToggleButton27_Click()
End Sub
Private Sub ToggleButton28_Click()
End Sub


Private Sub CommandButton1_Click()

 If Documents.Count = 0 Then
            FileName$ = CorelScriptTools.GetFileBox("All Files|*.*", 0)
        On Error Resume Next
            OpenDocument FileName$
          End If

ActiveDocument.Unit = cdrMillimeter
On Error GoTo Errhandler

If ToggleButton1.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\PAP.cdr", cdr): FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton2.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\LDPE.cdr", cdr): ActiveSelection.Move 10, 0: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton3.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\HDPE.cdr", cdr): ActiveSelection.Move 20, 0: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton4.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\7.cdr", cdr): ActiveSelection.Move 30, 0: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton5.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\STR.cdr", cdr): ActiveSelection.Move 40, 0: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton6.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\RST.cdr", cdr): ActiveSelection.Move 0, 10: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton7.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\EAC.cdr", cdr): ActiveSelection.Move 10, 10: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton8.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\CE.cdr", cdr): ActiveSelection.Move 20, 10: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton9.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\FOOD.cdr", cdr): ActiveSelection.Move 30, 10: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton10.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\NONFOOD.cdr", cdr): ActiveSelection.Move 40, 10: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton11.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\UTIL.cdr", cdr): ActiveSelection.Move 0, 20: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton12.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\SHWR.cdr", cdr): ActiveSelection.Move 10, 20: FilterObject.Finish: ActiveWindow.Refresh
End If



If ToggleButton14.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\UMBR.cdr", cdr): ActiveSelection.Move 30, 20: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton15.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\UP.cdr", cdr): ActiveSelection.Move 40, 20: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton16.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\FRGL.cdr", cdr): ActiveSelection.Move 0, 30: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton17.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\COLD.cdr", cdr): ActiveSelection.Move 10, 30: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton18.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\TRASH.cdr", cdr): ActiveSelection.Move 20, 30: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton19.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\II.cdr", cdr): ActiveSelection.Move 30, 30: FilterObject.Finish: ActiveWindow.Refresh
End If

If ToggleButton20.Value = True Then
Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\III.cdr", cdr): ActiveSelection.Move 40, 30: FilterObject.Finish: ActiveWindow.Refresh
End If

   
    If ToggleButton21.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\CPVC.cdr", cdr): ActiveSelection.Move 10, 40: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton22.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\5.cdr", cdr): ActiveSelection.Move 20, 40: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton23.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\PP.cdr", cdr): ActiveSelection.Move 30, 40: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton24.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\PS.cdr", cdr): ActiveSelection.Move 40, 40: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton25.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\PVC.cdr", cdr): ActiveSelection.Move 10, 50: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton26.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\PVD.cdr", cdr): ActiveSelection.Move 20, 50: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton27.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\CLDPE.cdr", cdr): ActiveSelection.Move 30, 50: FilterObject.Finish: ActiveWindow.Refresh
End If
    If ToggleButton28.Value = True Then
        Set FilterObject = ActiveLayer.ImportEx("\\market-nas\market\pictogram\CPAP.cdr", cdr): ActiveSelection.Move 40, 50: FilterObject.Finish: ActiveWindow.Refresh
End If
   
 
   

ActiveWindow.ActiveView.ToFitPage
 
Errhandler:
 End Sub
 
Private Sub CommandButton2_Click()
ToggleButton1.Value = False
ToggleButton2.Value = False
ToggleButton3.Value = False
ToggleButton4.Value = False
ToggleButton5.Value = False
ToggleButton6.Value = False
ToggleButton7.Value = False
ToggleButton8.Value = False
ToggleButton9.Value = False
ToggleButton10.Value = False
ToggleButton11.Value = False
ToggleButton12.Value = False
ToggleButton13.Value = False
ToggleButton14.Value = False
ToggleButton15.Value = False
ToggleButton16.Value = False
ToggleButton17.Value = False
ToggleButton18.Value = False
ToggleButton19.Value = False
ToggleButton20.Value = False
ToggleButton21.Value = False
ToggleButton22.Value = False
ToggleButton23.Value = False
ToggleButton24.Value = False
ToggleButton25.Value = False
ToggleButton26.Value = False
ToggleButton27.Value = False
ToggleButton28.Value = False
End Sub
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
31 065
Реакции
10 224
А пустые обработчики зачем?
Я так понял вам именно их скомпилировать надо было, а проверки-присваивания конечно можно универсально сделать, как Рома говорит
 

lev

Модератор
15 лет на форуме
Сообщения
2 056
Реакции
1 946
Вот примерчик накидал

Чуток поторопился, должно быть nbuttons(n).Number=n, чтобы по номеру из массива брать имя файла для импорта, лень перезакидывать gms
 

Вложения

  • bt.zip
    6.8 КБ · Просм.: 22
Последнее редактирование:
  • Спасибо
Реакции: mnemonix

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
246
Реакции
76

lev

Модератор
15 лет на форуме
Сообщения
2 056
Реакции
1 946
Мне лень было марафеты наводить, текстом напишу.
Для кнопок стоит фрейм завести и в нём их генерировать. При большом кол-ве кнопок, можно скроллбар приделать.
Про иконки, имена файлов и т.п. в коде упомянул. Особых сложностей не вижу.
 
  • Спасибо
Реакции: mnemonix