Виктор
-
Постов
30 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Ответы сообщества
-
Пост Виктор - сообщение в Как узнать из какого ListBoxItem был вызван обработчик был отмечен как ответ
Для этого надо найти ближайшего родителя у элемента класса, нужного класса (прошу прощения за тавтологию). С помощью вот такой вот универсальной функции.
Item := TListBoxItem(FindItemParent(Sender as TFmxObject,TListBoxItem)); function FindItemParent(Obj: TFmxObject; ParentClass: TClass): TFmxObject; begin Result := nil; if Assigned(Obj.Parent) then if Obj.Parent.ClassType = ParentClass then Result := Obj.Parent else Result := FindItemParent(Obj.Parent, ParentClass); end; -
Пост Виктор - сообщение в Как получить TListBoxItem по индексу в TListBox? был отмечен как ответ
Доброго дня.
Что бы получить дочерний item зная его индекс надо воспользоваться функцией ItemByIndex самого ListBox-а:
var Item: TListBoxItem; Index: Integer; begin Item := ListBox1.ItemByIndex(Index); end; -
Пост Виктор - сообщение в Как можно реализовать в TTreeView события OnExpand и OnCollapse? был отмечен как ответ
Реализовать данные события можно через стили. Находишь в стиле элемент клик на который должен вызывать раскрытие или закрытие дочернего элемента (плюсик, стрелочка и т.д.). Как правило это элемент класса TButton или TButtonStyleObject, что бы мог изменять состояние при нажатии автоматически. Создаешь процедуру которая будет присваивать элементу стиля обработчик нажатия.
procedure TFForder.TreeView2ApplyStyleLookup(Sender: TObject); var Item: TTreeViewItem; begin Item := TTreeViewItem(Sender); Item.StylesData['button'] := TValue.From<TNotifyEvent>(Click); end; При создании дочернего элемента TTreeView:
It.OnApplyStyleLookup := Treeview2.OnApplyStyleLookup; И пишешь саму процедуру при нажатии на элемент стиля где выясняешь надо свернуть или развернуть элемент:
function FindItemParent(Obj: TFmxObject; ParentClass: TClass): TFmxObject; begin Result := nil; if Assigned(Obj.Parent) then if Obj.Parent.ClassType = ParentClass then Result := Obj.Parent else Result := FindItemParent(Obj.Parent, ParentClass); end; procedure TFForder.Click(Sender: TObject); var Item: TTreeViewItem; begin TreeView2.BeginUpdate; Item := TTreeViewItem(FindItemParent(Sender as TFmxObject,TTreeViewItem)); if Item <> nil then if Item.IsExpanded = False then begin //здесь пишешь то что надо сделать при разворачивании элемента Item.Expand; end else begin //здесь пишешь что надо сделать при сворачивании элемента Item.Collapse; end; TreeView2.EndUpdate; end; -
Пост Виктор - сообщение в Не получается программно создать компонент в runtime был отмечен как ответ
Благодарю за ответ, автор как говориться сам опозорился. Проблема была не в создании, а в ссылке на экземпляр формы.
-
Пост Виктор - сообщение в Назначение обработчиков событий для элементов стиля через StylesData был отмечен как ответ
Спасибо, я уже разобрался, всё дело было в том что требуется задавать обработчики событий для элементов стилей еще и в OnApplyStyleLookup задавать иначе они затираются.