Перейти к содержанию
Fire Monkey от А до Я

Frol

Пользователи
  • Постов

    23
  • Зарегистрирован

  • Посещение

Весь контент Frol

  1. Есть ли какая-то фича типа прижатого шифта, чтобы выбирать сразу несколько вариантов? или это просто руками вписывается?
  2. В приведенном мной примере есть TreeViewItem, нарисованный на лейауте на который помимо стандартных элементов был добавлен еще чекбокс, а у него анимация... Я пробовал искать анимацию и от чекбокса и от TreeViewItem-а... Видимо какая-то криворукость присутствует... Чекбокс находился. т.е. стиль на момент поиска уже применен. Анимация работает... Но найти ее не смог (( обращаться к ней через StylesData не пробовал. Я понял идею... не понял где у меня криворукость, но однажды получится )))) Можете пояснить эту мысль? "любые пользовательские данные" очень нужно хранить )) как может пригодиться StylesData?
  3. Спасибо Dmitry_4501. Есть вариант решения. В стиле под TTreeViewItem подкладывается прямоугольник. и дальше организуется подобный цикл Подобный подход достаточно гибкий. Можно раскрашивать не в два, а в три цвета, например. Но есть "всякие но и если". Если какой-то узел мы делаем невидимым Item.Visible:=false, то и все его дочерние узлы надо не забыть сделать невидимыми развертывание/свертывание узлов, добавление/удаление/перемещение, сокрытие (само собой) - надо не забыть и переопределить цвета бэккграунда Прямоугольник по своей ширине не совпадает с шириной дерева. Вот тут видно - каждый следующий уровень вложения и прямоугольник все Уже и Уже. Если уровней 1-2, то не портит картинку, на мой взгляд, но если 3-4 или больше, то уже может резать глаз кому-то. Стандартное раскрашивание заполняется на всю ширину. И стандартное раскрашивает все само, что очень удобно ))), а так придется следить за деревом... Само не перерисуется ((( Если у кого появятся еще идеи - буду признателен... UPD Margins.Left:=-1000 для прямоугольника бэкграунда решает проблему лесенки. Все получается во всю ширину и очень опрятно.
  4. Очень изящное решение, мне кажется. Не думал, что так можно. На чекбокс стоит тригер на анимацию и на обратную анимацию В результате анимация не срабатывает когда чекбокс с галочкой. Это не снимает вопрос как найти анимацию как объект стиля, но теперь и не надо ))) нужный эффект получен. Спасибо Dmitry_4501
  5. Спасибо, на выходных изучу.
  6. Не понял того, что вы пишите. У вас там цитата, но цитата не точная. "Не найден объект по имени - Lock" находится на этой странице только один раз в вашем ответе (теперь будет находиться дважды) там возможно немного сумбурно написано. все же это какой-то тест просто. Ищется TFmxObject по имени стиля и если находится, то выводится его тип. По имени стиля Lock находится TCheckBox. TCheckBox со StyleName='Lock'. Первый поиск проходит успешно, а второй нет. Но теперь, я надеюсь, что пойму, что делал не так. Спасибо Дмитрию )
  7. да. такое. Чудо какое-то )
  8. Вот сама процедура теста. А вот то, что оказывается в Memo FloatAnimation1Style - присвоено автоматически в момент создания
  9. Есть компонент, который отрисовываеься с помощью стиля. Для него в stylebook создана анимация. Как через код можно добраться до этой анимации и изменить ее параметры? Если конкретнее, то речь идёт о чекбоксе и его прозрачности. По умолчанию в момент наведения мышки он должен загораться, а когда мышка уезжает - тухнуть. Но если галочка стоит, то должен гореть всегда (пока не не снимут). Была идея по клику чекбокса изменить триггер анимации с движения мышки на что-то, что никогда не происходит, а по второму клику вернуть как было. Так вполне работает, если анимация и чекбокс созданы в момент дизайна и к анимации можно обратиться как к переменной. В этом второй вопрос - как лучше отключить анимацию на время? Вот тут описано решение Только оно не работает. Может потому, что это 14 год, а может я как-то криво копирую, но FindStyleResource находит чекбокс в компоненте и не находит анимацию в чекбоксе.
  10. Всем привет. Есть дерево у которого TreeView.AlternatingRowBackground:=true; все отображается так, как надо Теперь у дерева надо скрыть какие-то узлы изменяя их видимость for i:=0 to TreeView.Count-1 do TreeView.Items[i].Visible:= (i mod 5)<>0; В данном случае скрывается каждый пятый узел. И вот, что получается Чередование нарушается. Как можно вернуть правильное чередование? В реальном проекте структура узлов более сложная, есть несколько различных правил по котором надо скрывать или показывать узлы. Не хочется удалять узлы и перестраивать дерево заново каждый раз. Скрытие узлов через Visible:=false выглядит очень привлекательно.
  11. решение найдено. вот такое исправление кода всё наладило
  12. Добрый день. Неожиданно столкнулся со странностью. В проекте объявлены такие классы A и B наследники от TTreeViewItem, а AA и AAA наследники от наследника. Но ни в каком из этих классов нет никаких изменений. В моем понимании это просто другое имя класса и все. Есть такая процедура В результате (в моем понимании) должно получиться 5 узлов в корне с текстом ItemO, ItemA, ItemB, ItemAA, ItemAAA. Но по факту оказывается, что для наследников от наследника текст не выводится, и кнопка сворачивания узла не рисуется. А в Memo появляется правильный текст... Что я делаю не так?
  13. Я видел эти два урока уже раньше. Мне казалось, что FindStyleResource и StylesData предлагаются как альтернатива. StylesData, как я понял, не позволяет передавать значения для множеств... А в остальном как альтернатива. У меня же явно выходит, что StylesData работает, а FindStyleResource нет. Но посмотрю внимательнее. спасибо.
  14. Пытаюсь разобраться со стилями... Вот такой код срабатывает Находится нужный TText и цвет шрифта становится синим. Это происходит в тот момент, когда стиль применяется... Если же попытаться сделать это потом Все как было, но потом... То ничего не происходит... и если обращаться снаружи к объекту не работает НО работает StylesData Т.е. StylesData находит 'Mass.TextSettings.FontColor', а FindStyleResource не находит Mass:TText Как победить FindStyleResource?
  15. Эксперименты показали, что TreeView.Sorted:=true сортирует только верхний уровень. Каждый вложенный узел надо сортировать через TreeViewItem.Sort(). При этом могут возникать дефекты визуализации. Какие-то узлы после вообще не отрисованы. Спасает свернуть и развернуть узел. TreeView.Repaint не помогает. Это, конечно метод. Если у пользователя идет работа с деревом, которое он видит и понимает (добавление узлов, их перенос, изменение имен), то после каждого такого единичного и простого действия надо записать дерево в модель, отсортировать ее там, и заново нарисовать дерево... При этом после отрисовки заново сохранить свернутость/развернутость узлов, положение дерева на экране (если оно длинное и не помещается целиком), подсветить выделенные узлы и т.д. Наверное я очень ленивый ))) Если нет никакого специального флажка где-то, который позволял бы TreeView.Sorted:=true сортировать все узлы на всех уровнях и позволял бы забыть вообще о такой заботе, я выберу сортировать конкретный узел и постараюсь победить визуализацию.
  16. есть такая процедура В результате получается список узлов в корне с случайными именами. Процедура TreeView1Compare вызывается в момент TreeView1.Sorted:=true; и сортирует узлы в правильном порядке. Все прекрасно. Если вместо //!!!!!!!!!!!!!!! добавить вот такой блок перемещающий узлы дерева из корня и превращающий список в дерево, то TreeView1Compare не вызывается! Как это можно исправить? нужно сортировать дерево. UPD. Этот блок перемещает все узлы в самый первый. Если оставить несколько узлов в корне, то процедура сортировки вызывается, но сортирует только верхний уровень. вложенные уровни не сортируются. Как быть с сортировкой внутри веток?
  17. С точки зрения дерева удаление происходит корректно. Но какой-то сторонний наблюдатель, который знал адрес куда смотреть продолжает видеть там не Nil. Я могу в момент удаления узла из дерева принудительно удалить его и из списка. Но мне любопытно как так. В VCL такой метод сработал бы. Я вижу тут какую-то особенность FM, которую не понимаю. Я понял идею. Когда я создавал Item, то сперва создавал его, а потом прописывал уже созданному указатель на родителя. Попробую удалять item средствами родителя, хотя не уверен, что что-то поменяется: С точки зрения дерева удаление происходит корректно. Ну... или так кажется ))) чтобы разорвать связь с парентом этого не достаточно?
  18. Up почему после удаления объекта через FreeAndNil обращение к нему возможно?
  19. Не так все оказалось банально. Когда включен мультиселект в дереве, то могут возникать более сложные комбинации чем один убрали, второй записали. Может происходить накопление узлов в ссылке или мгновенный сброс накопленных. Кроме того выделение может происходить не только по клику мышкой, но и по нажатию стрелочки на клавиатуре. В некоторых ситуациях возможно появление дублирующих ссылок на узел в списке. Все это не сложно, просто требует какой-то аккуратности и проверок. Для меня FireMonkey что-то совсем новое... Так-то оно все очень полезно даже... Но некоторые моменты ставят в тупик. В контексте данной задачи для тренировки написал процедуру которая обходит все узлы дерева и удаляет те, что являются IsSelected. Деструктор выглядит так деструктор вызывается таким образом после этого в моем понимании указатель на узел дерева должен быть NIL После удаления узлов я прохожу цикл по списку и удаляю из него те, которым в нем уже не место Собственно новый вопрос тут в моем понимании проверка Assigned(Item) для удаленного узла должна дать false. Но все узлы true. Даже удаленные У удаленных нет текста, IsSelected=false, какие-то их проперти NIL... Но сам узел есть в памяти. Обращение к полям узла в данной процедуре не вызывает ошибку. как так?
  20. т.е. я создаю свой список и на момент клика по элементу добавляю или удаляю? Понятно. спасибо
  21. Добрый день в VCL можно было получить список выделенных узлов. Например с помощью TCustomTreeView.GetSelections(AList: TList) можно было записать их в список. При этом сохранялись не только сами узлы, но и порядок в котором они выбирались. Есть ли способ восстановить последовательность выделения в FM без танцев с бубнами? )))
×
×
  • Создать...