Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обратная связь вида кнопки на ленте (Ribbon) с состоянием - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Обратная связь вида кнопки на ленте (Ribbon) с состоянием
Alex_ST Дата: Понедельник, 18.06.2012, 16:51 | Сообщение № 1
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Переделываю ё... ленту Excel-2010 под себя
Никак что-то не соображу, можно ли, не используя свои внедряемые картинки, а только встроенные сделать кнопку с картинкой "нажатой" (на жёлтом фоне)/"отпущенной" (на прозрачном фоне) в зависимости от состояния программы (переменной в программе?)
Вот пример:
Простейший макрос управляет параметром "показывать нули"/скрывать нули"
Вкладка с кнопкой и кнопка на QAT работают, макрос кнопкой вызывается.
Но вот как сделать чтобы при включенном отображении нулей кнопочка была "нажатой"?
Никак не соображу sad
К сообщению приложен файл: Zeros.xlsm (13.9 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеПеределываю ё... ленту Excel-2010 под себя
Никак что-то не соображу, можно ли, не используя свои внедряемые картинки, а только встроенные сделать кнопку с картинкой "нажатой" (на жёлтом фоне)/"отпущенной" (на прозрачном фоне) в зависимости от состояния программы (переменной в программе?)
Вот пример:
Простейший макрос управляет параметром "показывать нули"/скрывать нули"
Вкладка с кнопкой и кнопка на QAT работают, макрос кнопкой вызывается.
Но вот как сделать чтобы при включенном отображении нулей кнопочка была "нажатой"?
Никак не соображу sad

Автор - Alex_ST
Дата добавления - 18.06.2012 в 16:51
Саня Дата: Понедельник, 18.06.2012, 17:47 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Quote (Alex_ST)
ё... ленту

как-то брезглив я к таким вещам, но ладно... biggrin

toggleButton
К сообщению приложен файл: 3484614.xlsm (14.4 Kb)
 
Ответить
Сообщение
Quote (Alex_ST)
ё... ленту

как-то брезглив я к таким вещам, но ладно... biggrin

toggleButton

Автор - Саня
Дата добавления - 18.06.2012 в 17:47
Alex_ST Дата: Вторник, 19.06.2012, 09:03 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Саня,
спасибо за пример работы с ToggleButton. Пригодится в будущем однозначно.
Но это не совсем то, что я хотел в данном случае. Наверное, не внятно объяснил.
Я хочу сделать кнопку-переключатель, которая будет одновременно служить и для индикации текущего состояния, и для его переключения по ЛКМ (т.е. аналог стандартных кнопок-переключателей).

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

Сейчас попробую (если ничем по работе не грузанут, конечно) и отпишусь.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаня,
спасибо за пример работы с ToggleButton. Пригодится в будущем однозначно.
Но это не совсем то, что я хотел в данном случае. Наверное, не внятно объяснил.
Я хочу сделать кнопку-переключатель, которая будет одновременно служить и для индикации текущего состояния, и для его переключения по ЛКМ (т.е. аналог стандартных кнопок-переключателей).

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

Сейчас попробую (если ничем по работе не грузанут, конечно) и отпишусь.

Автор - Alex_ST
Дата добавления - 19.06.2012 в 09:03
Саня Дата: Вторник, 19.06.2012, 09:23 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Quote (Alex_ST)
Я хочу сделать кнопку-переключатель, которая будет одновременно служить и для индикации текущего состояния, и для его переключения по ЛКМ (т.е. аналог стандартных кнопок-переключателей).

ToggleButton - это и есть кнопка-переключатель, ничего другого тебе не надо angry .

для твоих целей нужно просто отслеживать некое событие (судя по всему, уровня приложения) и передавать в ленту свойство pressed тогллбаттона

ps
щас попробую слепить для одной книги...
 
Ответить
Сообщение
Quote (Alex_ST)
Я хочу сделать кнопку-переключатель, которая будет одновременно служить и для индикации текущего состояния, и для его переключения по ЛКМ (т.е. аналог стандартных кнопок-переключателей).

ToggleButton - это и есть кнопка-переключатель, ничего другого тебе не надо angry .

для твоих целей нужно просто отслеживать некое событие (судя по всему, уровня приложения) и передавать в ленту свойство pressed тогллбаттона

ps
щас попробую слепить для одной книги...

Автор - Саня
Дата добавления - 19.06.2012 в 09:23
Alex_ST Дата: Вторник, 19.06.2012, 14:58 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Не получается по событию изменять состояние ТoggleButton: почему-то теряется установка Set myRibbon = ribbon
К сообщению приложен файл: Zeros_2.xlsm (23.3 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНе получается по событию изменять состояние ТoggleButton: почему-то теряется установка Set myRibbon = ribbon

Автор - Alex_ST
Дата добавления - 19.06.2012 в 14:58
Саня Дата: Вторник, 19.06.2012, 15:08 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
наваял, смотри:
К сообщению приложен файл: tgl.xlsm (28.1 Kb)
 
Ответить
Сообщениенаваял, смотри:

Автор - Саня
Дата добавления - 19.06.2012 в 15:08
Alex_ST Дата: Вторник, 19.06.2012, 15:15 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Саш, что-то уж больно сложно для такого простейшего действия...
Не может быть, чтобы нельзя было без API и намного проще.

Я свой предыдущий пример делал на основе примера Витера.
У него всё работает, а у меня почему-то теряется назначение Риббона переменной и поэтому не срабатывает его обновление по myRibbon.InvalidateControl "tbtnZero"



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаш, что-то уж больно сложно для такого простейшего действия...
Не может быть, чтобы нельзя было без API и намного проще.

Я свой предыдущий пример делал на основе примера Витера.
У него всё работает, а у меня почему-то теряется назначение Риббона переменной и поэтому не срабатывает его обновление по myRibbon.InvalidateControl "tbtnZero"

Автор - Alex_ST
Дата добавления - 19.06.2012 в 15:15
Саня Дата: Вторник, 19.06.2012, 15:41 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
API там нужны только для того, чтобы ленту "поднять" из указателя (если ссылка отвалится)

посмотрел твой №2:
[vba]
Code
Sub SetRibbonByEvent(sEvent$, Optional vObj1 As Variant, Optional vObj2 As Variant)   ' настройка Ribbon'a по событиям
      Select Case sEvent
         Case "WorkbookActivate", "SheetActivate"
             tbtnZero_state = ActiveWindow.DisplayZeros
             myRibbon.InvalidateControl "tbtnZero"
      End Select
End Sub
[/vba]

все работает
 
Ответить
СообщениеAPI там нужны только для того, чтобы ленту "поднять" из указателя (если ссылка отвалится)

посмотрел твой №2:
[vba]
Code
Sub SetRibbonByEvent(sEvent$, Optional vObj1 As Variant, Optional vObj2 As Variant)   ' настройка Ribbon'a по событиям
      Select Case sEvent
         Case "WorkbookActivate", "SheetActivate"
             tbtnZero_state = ActiveWindow.DisplayZeros
             myRibbon.InvalidateControl "tbtnZero"
      End Select
End Sub
[/vba]

все работает

Автор - Саня
Дата добавления - 19.06.2012 в 15:41
Alex_ST Дата: Вторник, 19.06.2012, 16:23 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
А у меня нифига не работает:
должно при переходе на другой лист/книгу показывать на ленте нажатую/отпущенную кнопочку tbtnZero в зависимости от настроек активного листа.
У меня события перехватываются, но при их обработке возникает ошибка в [vba]
Code
Sub SetRibbonByEvent(sEvent$, Optional vObj1 As Variant, Optional vObj2 As Variant)   ' настройка Ribbon'a по событиям
     Select Case sEvent
        Case "WorkbookActivate", "SheetActivate"
           tbtnZero_state = ActiveWindow.DisplayZeros
           myRibbon.InvalidateControl "tbtnZero"
     End Select
End Sub
[/vba]на строке myRibbon.InvalidateControl "tbtnZero". Говорит, что
К сообщению приложен файл: 5368623.jpg (57.7 Kb) · 0874765.xlsm (23.4 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 19.06.2012, 16:25
 
Ответить
СообщениеА у меня нифига не работает:
должно при переходе на другой лист/книгу показывать на ленте нажатую/отпущенную кнопочку tbtnZero в зависимости от настроек активного листа.
У меня события перехватываются, но при их обработке возникает ошибка в [vba]
Code
Sub SetRibbonByEvent(sEvent$, Optional vObj1 As Variant, Optional vObj2 As Variant)   ' настройка Ribbon'a по событиям
     Select Case sEvent
        Case "WorkbookActivate", "SheetActivate"
           tbtnZero_state = ActiveWindow.DisplayZeros
           myRibbon.InvalidateControl "tbtnZero"
     End Select
End Sub
[/vba]на строке myRibbon.InvalidateControl "tbtnZero". Говорит, что

Автор - Alex_ST
Дата добавления - 19.06.2012 в 16:23
Саня Дата: Вторник, 19.06.2012, 17:00 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
запусти и посмотри окно иммидьет в редакторе - событие опережает загрузку ленты...

и еще,
1) не надо workbook_open, когда у тебя есть RibbonLoading
2) для обработки событий уровня приложения нужно создавать свой модуль класса, а не пихать их в модуле класса книги
К сообщению приложен файл: 1571234.xlsm (24.4 Kb)
 
Ответить
Сообщениезапусти и посмотри окно иммидьет в редакторе - событие опережает загрузку ленты...

и еще,
1) не надо workbook_open, когда у тебя есть RibbonLoading
2) для обработки событий уровня приложения нужно создавать свой модуль класса, а не пихать их в модуле класса книги

Автор - Саня
Дата добавления - 19.06.2012 в 17:00
Alex_ST Дата: Вторник, 19.06.2012, 17:21 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Саня, спасибо.
Тупо сравниваю твой код и свой … Различий не вижу sad
Но твой код работает, а мой - нет!
А это я вообще не понял:
Quote (Саня)
1) не надо workbook_open, когда у тебя есть RibbonLoading

RibbonLoading - это что, новое событие, заменяющее workbook_open ?

Всё! На сегодня я закончил. Голова опухла. Пора домой.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаня, спасибо.
Тупо сравниваю твой код и свой … Различий не вижу sad
Но твой код работает, а мой - нет!
А это я вообще не понял:
Quote (Саня)
1) не надо workbook_open, когда у тебя есть RibbonLoading

RibbonLoading - это что, новое событие, заменяющее workbook_open ?

Всё! На сегодня я закончил. Голова опухла. Пора домой.

Автор - Alex_ST
Дата добавления - 19.06.2012 в 17:21
Саня Дата: Вторник, 19.06.2012, 18:58 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
RibbonLoading - это процедура обратного вызова - вызывается при загрузке пользовательского интерфейса
последовательность вызовов (о чем я тебе писал "запусти и посмотри окно иммидьет в редакторе") можно увидеть на рисунке:
К сообщению приложен файл: 3936930.jpg (56.3 Kb)
 
Ответить
СообщениеRibbonLoading - это процедура обратного вызова - вызывается при загрузке пользовательского интерфейса
последовательность вызовов (о чем я тебе писал "запусти и посмотри окно иммидьет в редакторе") можно увидеть на рисунке:

Автор - Саня
Дата добавления - 19.06.2012 в 18:58
Alex_ST Дата: Вторник, 19.06.2012, 22:04 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Да, глаз-то на самом деле к концу дня замылился: различие-то, оказывается, есть - у тебя On Error Resume Next поставлено в Sub SetRibbonByEvent
Хоть это и грубо (ошибок-то вроде бы быть не должно), но действует отлично, а это - главное.

Саня, спасибо огромное.
Ну, вот теперь завтра наконец-то в свой самопальный интерфейс кнопочку вставлю.
А ведь целый день на это убил angry
Ну, ничего, тяжело в лечении - легко в гробу biggrin



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеДа, глаз-то на самом деле к концу дня замылился: различие-то, оказывается, есть - у тебя On Error Resume Next поставлено в Sub SetRibbonByEvent
Хоть это и грубо (ошибок-то вроде бы быть не должно), но действует отлично, а это - главное.

Саня, спасибо огромное.
Ну, вот теперь завтра наконец-то в свой самопальный интерфейс кнопочку вставлю.
А ведь целый день на это убил angry
Ну, ничего, тяжело в лечении - легко в гробу biggrin

Автор - Alex_ST
Дата добавления - 19.06.2012 в 22:04
Саня Дата: Вторник, 19.06.2012, 23:27 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Quote (Alex_ST)
Хоть это и грубо (ошибок-то вроде бы быть не должно), но действует отлично, а это - главное.

да это вообще не правильно

весь фарш из workbook_open перенеси в RibbonLoading,
для событийного приложения свой класс прицепи, а не щеми его в "книжном" модуле класса и все будет гуд

да, и не стоит пренебрегать возможностью поднимать упавший Риббон посредством конструкции "API-Pointer"...
 
Ответить
Сообщение
Quote (Alex_ST)
Хоть это и грубо (ошибок-то вроде бы быть не должно), но действует отлично, а это - главное.

да это вообще не правильно

весь фарш из workbook_open перенеси в RibbonLoading,
для событийного приложения свой класс прицепи, а не щеми его в "книжном" модуле класса и все будет гуд

да, и не стоит пренебрегать возможностью поднимать упавший Риббон посредством конструкции "API-Pointer"...

Автор - Саня
Дата добавления - 19.06.2012 в 23:27
Alex_ST Дата: Среда, 20.06.2012, 09:25 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Саня,
1. В Workbook_Open у меня (в данном примере) всего-то назначение объекта App для отлавливания событий:[vba]
Code
Private Sub Workbook_Open()
    Set App = Application
End Sub
[/vba]
2. А вообще объект App мне нужен не только для работы с этой единственной кнопкой. По его событиям, например, ещё и по App_WorkbookOpen проверяется стиль ссылок при открытии новой книги и предлагается исправить его на А1, при необходимости работает макрос автоматического показа стрелок влияющих/зависимых ячеек при App_SheetSelectionChange и т.д.
(Не просто же от делать нечего я прописал в процедуру SetRibbonByEvent кроме имени события её вызвавшего, ещё и пару опциональных параметров As Variant)

3. В Workbook_Open в дальнейшем будет и прописка описаний UDF в категорию "Определенные пользователем", и назначение хоткеев, и изменение меню ячейки, и …

Ну, и самое главное, наверное:
- с модулями классов я так к своему стыду работать и не научился … Ну, разобрать-то чужой код смогу, но вот слепить свой sad
- а вот от API вообще шарахаюсь как чёрт от ладана - не понимаю совсем.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаня,
1. В Workbook_Open у меня (в данном примере) всего-то назначение объекта App для отлавливания событий:[vba]
Code
Private Sub Workbook_Open()
    Set App = Application
End Sub
[/vba]
2. А вообще объект App мне нужен не только для работы с этой единственной кнопкой. По его событиям, например, ещё и по App_WorkbookOpen проверяется стиль ссылок при открытии новой книги и предлагается исправить его на А1, при необходимости работает макрос автоматического показа стрелок влияющих/зависимых ячеек при App_SheetSelectionChange и т.д.
(Не просто же от делать нечего я прописал в процедуру SetRibbonByEvent кроме имени события её вызвавшего, ещё и пару опциональных параметров As Variant)

3. В Workbook_Open в дальнейшем будет и прописка описаний UDF в категорию "Определенные пользователем", и назначение хоткеев, и изменение меню ячейки, и …

Ну, и самое главное, наверное:
- с модулями классов я так к своему стыду работать и не научился … Ну, разобрать-то чужой код смогу, но вот слепить свой sad
- а вот от API вообще шарахаюсь как чёрт от ладана - не понимаю совсем.

Автор - Alex_ST
Дата добавления - 20.06.2012 в 09:25
Alex_ST Дата: Среда, 20.06.2012, 09:31 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Да! Тут ещё один жестокий облом меня настиг:
оказывается, что в QAT возможны только элементы button, control, separator, а toggleButton - нет!
А я-то надеялся свою кнопочку 0 в результате в QAT вывести sad



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеДа! Тут ещё один жестокий облом меня настиг:
оказывается, что в QAT возможны только элементы button, control, separator, а toggleButton - нет!
А я-то надеялся свою кнопочку 0 в результате в QAT вывести sad

Автор - Alex_ST
Дата добавления - 20.06.2012 в 09:31
Саня Дата: Среда, 20.06.2012, 10:40 | Сообщение № 17
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
RibbonLoading выполняется непосредственно после Workbook_Open, но это дело вкуса - кому как по душе... главное, чтобы вилы не вылезли и обработчик ошибок не функционировал как заглушка нелогичности происходящего.

Quote (Alex_ST)
Ну, и самое главное, наверное:
- с модулями классов я так к своему стыду работать и не научился … Ну, разобрать-то чужой код смогу, но вот слепить свой sad
- а вот от API вообще шарахаюсь как чёрт от ладана - не понимаю совсем.

4, 5 лекции - типа ООП, 6 - API. Советую.

Quote (Alex_ST)
а toggleButton - нет!

правда жизни
 
Ответить
СообщениеRibbonLoading выполняется непосредственно после Workbook_Open, но это дело вкуса - кому как по душе... главное, чтобы вилы не вылезли и обработчик ошибок не функционировал как заглушка нелогичности происходящего.

Quote (Alex_ST)
Ну, и самое главное, наверное:
- с модулями классов я так к своему стыду работать и не научился … Ну, разобрать-то чужой код смогу, но вот слепить свой sad
- а вот от API вообще шарахаюсь как чёрт от ладана - не понимаю совсем.

4, 5 лекции - типа ООП, 6 - API. Советую.

Quote (Alex_ST)
а toggleButton - нет!

правда жизни

Автор - Саня
Дата добавления - 20.06.2012 в 10:40
Alex_ST Дата: Среда, 20.06.2012, 12:36 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (Саня)
4, 5 лекции - типа ООП, 6 - API. Советую.

Спасибо. Будет время - почитаю обязательно.
Quote (Саня)
правда жизни
это называется по-другому, но не слишком цензурно и весьма обидно для мелко-мягких (хотя они, наверное, давно уже привыкли к таким отзывам о массе их косяков и недодумок в интерфейсах)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (Саня)
4, 5 лекции - типа ООП, 6 - API. Советую.

Спасибо. Будет время - почитаю обязательно.
Quote (Саня)
правда жизни
это называется по-другому, но не слишком цензурно и весьма обидно для мелко-мягких (хотя они, наверное, давно уже привыкли к таким отзывам о массе их косяков и недодумок в интерфейсах)

Автор - Alex_ST
Дата добавления - 20.06.2012 в 12:36
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!