Страницы: 1
RSS
Пользовательская функция: исключить повторное рисование графических объектов
 
Здравствуйте.
Подскажите куда копать. Есть идея рисовать графические объекты (линии, прямоугольники, автофигуры, в том числе с текстом) с помощью пользовательской функции. Не могу придумать, как исключить повторное рисование фигур, то есть когда функция вызывается первый раз, фигура рисуется, все последующие разы - только применяются аргументы (например размеры, цвет, текст), а также удаление фигур при удалении функций. Я так понимаю нужно где-то хранить взаимосвязь ячейки с функцией и нарисованной фигурой.

PS. Пример не прилагаю, так как вопрос больше теоретический (пока)

Вопрос не по  теме удален [МОДЕРАТОР]
 
Ответ тоже теоретический: используйте оператор If-End If
 
Хорошо, If что? Если функция будет использоваться не один раз, а много и в разных ячейках. Вопрос как раз в том, как узнать при вызове функции, какой же графический объект ранее именно ей был нарисован, чтобы применить к нему новые параметры.
 
записывайте последний созданный в глобальную переменную -и будете знать
Изменено: Ігор Гончаренко - 13.07.2018 20:54:36
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Alec Perle написал:
где-то хранить взаимосвязь ячейки с функцией и нарисованной фигурой
в свое время делал так: при помощи Application.Caller определял адрес ячейки, которая создавала объект и назначал этому объекту имя, включающее адрес этой ячейки. Типа "_tmpobj_A1". В последующем, даже если объект был перемещен его можно было найти и если он создан - не создавать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
В переменную я могу и все соответствие ячеек с формулами и нарисованных ими объектов сохранить. А как быть при открытии файла для продолжения работы? И с удалением формулы из ячеек?
 
Записывать в семейство имен книги.

Цитата
Alec Perle написал: Хорошо, If что?
Хорошо, пример будет?
 
Ок, накидал пример вызова несущестующей функции, при вычислении на листе (может Лист2, пока не важно) должны нарисоваться прямоугольники, составляя сетку 9х9 с заданным текстом. Координаты, количество прямоугольников, текст, и вообще вызов функции "Прямоугольник" (путем ввода/копирования или удаления формулы) может поменяться пользователем произвольно, результат не должен зависеть от любых других действий (вызовом макросов, нажатия кнопок и т.д.), только  от стандартного пересчета листа.
 
А мой совет никак не хочется попробовать прикрутить  самостоятельно?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Alec Perle написал:
А как быть при открытии файла для продолжения работы? И с удалением формулы из ячеек?
Создайте лист. Скройте его. И в нём всё что угодно пишите, храните любые настройки и конфигурации.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
лист. Скройте его. И в нём всё что угодно пишите
функция пользователя не может изменять значения других ячеек...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
А мой совет никак не хочется попробовать прикрутить  самостоятельно
Прошу прощения за невнимательность, увлекся созданием примера. То есть присваивать уникальное имя и ячейке и объекту? Интересная идея, возможно то что нужно. Буду пробовать.
Цитата
Дмитрий(The_Prist) Щербаков написал:
функция пользователя не может изменять значения других ячеек...
С эти все равно приходится бороться, так как изменение некоторых параметров объектов, например текста, тоже нельзя реализовать непосредственно при работе функции. Но здесь можно выйти из положения, обрабатывая событие Calculate.
Страницы: 1
Наверх