Форум: "Компоненты";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
ВнизУдаление компонента Найти похожие ветки
← →
DimaBr (2006-05-10 12:56) [0]Здравствуйте !
Как в компоненте можно предотвратить его удаление с формы ?
← →
Джо © (2006-05-10 13:08) [1]Ужас какой. А можно поинтересоваться — зачем?!
← →
DimaBr (2006-05-10 13:37) [2]Есть панель с несколькими кнопками. Кнопки создаются как "дочерние" компоненты панели, т.е :
...
object Panel: TPanel
object Button1: TButton
end
object Button2: TButton
end
end
...
Их можно ВЫБРАТЬ в дизайнере (это +) и удалить (это -).
← →
Чапаев © (2006-05-10 13:43) [3]
> Есть панель с несколькими кнопками. Кнопки создаются как
> "дочерние" компоненты панели
Может, стоит смотреть в сторону фреймов?
← →
Джо © (2006-05-10 13:46) [4]> [2] DimaBr (10.05.06 13:37)
> Есть панель с несколькими кнопками. Кнопки создаются как
> "дочерние" компоненты панели, т.е :
>
> ...
> object Panel: TPanel
> object Button1: TButton
> end
> object Button2: TButton
> end
> end
> ...
>
> Их можно ВЫБРАТЬ в дизайнере (это +) и удалить (это -).
Почему это "минус"? А если программисту их НУЖНО удалить?
← →
DimaBr (2006-05-10 14:54) [5]
> А если программисту их НУЖНО удалить?
Не нужно. Их количество фиксированно.
← →
Яся (2006-05-11 12:44) [6]Oтказаться от возможности "ВЫБРАТЬ в дизайнере (это +)"
← →
DimaBr (2006-05-11 13:41) [7]
> Яся
;(((
Тогда есть другой вопрос. Можно ли удалить в дизайнере элемент коллекции, не пользуясь редактором, ну и не вырезая его из DFM-ки.
← →
Юрий Зотов © (2006-05-11 14:39) [8]> DimaBr (11.05.06 13:41) [7]
Никто не мешает сделать редактор компонента и там вытворять все, что угодно. В частности, править свойство-коллекцию.
← →
Яся (2006-05-11 16:55) [9]
> Можно ли удалить в дизайнере элемент коллекции, не пользуясь
> редактором
Стандартным редактором коллекции?
И что все-таки требуется удалять или нет?
← →
DimaBr (2006-05-11 17:16) [10]
> Юрий Зотов ©
править свойство-коллекцию.
Мне не надо править свойство.
> Яся
> И что все-таки требуется удалять или нет?
Нет. Раз не получается предотвратить удаление компонента, я подумал что возможно не удастся удалить элемент коллекции (без редактора)
← →
Яся (2006-05-11 17:47) [11]Если кнопки создаются как "дочерние" компоненты панели (owner панель), то в дизайнере их нельзя выделить, а значит и удалить. Этот вариант подходит?
← →
Юрий Зотов © (2006-05-11 20:28) [12]> DimaBr
[7] можно понять и наоборот.
Если нет редактора коллекции, то как можно удалить ее элемент? Вроде, никак, в IDE других средств нет.
Но вообще, что-то странноватое Вы затеяли. Обычно необходимость в такого рода фокусах (чтобы выделить было можно, а удалить нельзя) возникает при недостаточно продуманном проектировании компонента. Столкнувшись с такой необходимостью, я бы именно с этого пересмотра и начал, если честно.
← →
DimaBr (2006-05-12 09:11) [13]
> Юрий Зотов
Скорее это из-за лени или из-за незнания.
Зачастую требуется внедрить в компонент другой с возможностью редактирования в дизайнере. Для этого (на сколько я понимаю) можно:
а). Написать класс TPersistent повторяющий публикуемые свойства;
б). Внедрить как СУБкомпонент - (SetSubComponent(true);)
в). Написать собственный редактор.
Первые два варианта - раскрывающийся список. Третий - дополнительне окно. Хотелось бы иметь возможность редактирования компонента (без дополнительного окна и без раскрывающихся списков), то есть например, можно выбрать колонку в гриде нажав на заголовок в дизайнере.
Поскажите как это можно реализовать.
← →
georgius © (2006-05-18 21:42) [14]А еще можно использовать наследование форм - контролы предка удалить не получится
← →
Наиль © (2006-11-03 13:43) [15]> Если нет редактора коллекции, то как можно удалить ее элемент?
> Вроде, никак, в IDE других средств нет.
Есть, Object TreeView имееющийся в D7, очень хорошо заточен для управления коллекциями и Action"ами.
Поэтому подмена редактора для коллекции (для данной задачи) - не выход (если не написать собственное отображение класса в Object TreeView).
> то есть например, можно выбрать колонку в гриде нажав на
> заголовок в дизайнере
Такое в принципе осуществить можно. Но сложнее, чем управляемый грид в отдельном окне. Для начало нужно учесть, что от клавиши DEL спасенья нет.
Пусть грид - родитель, а колонка - дитя. Тогда ребёнок при удалении должен оповещать родителя о собственом удалении. Задача родителя, запомнить информацию о ребёнке и сделать такого же. Далее, родитель убирает информацию о ребёнке из списка и помещает на её место информацию о новом ребёнке. Для реального удаления должен использоваться специальный метод ребёнка, который вызывает Destroy без оповещения родителя.
В момент удаления ребёнка прорисовка родителя должна быть "приостановлена". Например, если этого не сделать, то столбцы грида схлопнутся и расхлопнуться, на глазах у пользователя, а намёка на удаление и быть не должно. Естествено, после такого фокуса, ссылки на столбцы станут битыми. Казалось бы, ничего страшного в этом нет, т.к. вряд ли будет использоваться компонент ссылающийся на столбцы в DesignTime. В RunTime такое возможно, но никто не станет удалять не удаляемые столбцы. Для грида это так, но в общем случае, нужно защититься от существования битых ссылок.
← →
DimaBr (2006-11-03 15:00) [16]
> Для начало нужно учесть, что от клавиши DEL спасенья нет
Хорошо написано, однако в DevExpress это всё таки реализовано, правда я так и не понял каким образом, но уж точно не подменой удалённой колонки новою.
← →
Юрий Зотов © (2006-11-03 16:27) [17]> от клавиши DEL спасенья нет
Например: разве что-то мешает поставить системный хук?
:о)
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c