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

Лидеры

Популярный контент

Показан контент с высокой репутацией 05.10.2017 во всех областях

  1. ENERGY

    Кнопки у ListVew ItemAppearance

    Есть еще один альтернативный способ доступа к объектам. Вместо AItem.Objects.FindDrawable('TextButton16') можно обращаться по индексам. Это гораздо быстрее. Т.к. не нужно перебирать все объекты и сравнивать их строковые имена. К примеру в моем случае их аж 16, и у каждого есть имя. Каждое строковое имя нужно перебрать и сравнить с искомым. При этом в OnUpdateObjects это может делаться несколько раз на каждый List item. Сделать это можно так: aItem.View.ViewList[x] Напр: aItem.View.ViewList[10].Height := 30; Список можно посмотреть так: В инспекторе объектов, найдите ListView, в нем Item. Выберите его, и в списке свойств нажмите Objects- это и будет полные список объектов. Начинается он с нуля. Отсчитаете нужный, и можно работать с ним. Upd: Также можно изменять объекты TListItem'a по индексу вместо Data['name']. Там тоже используется FindDrawable. Для этого сначала нужно добавить один раз значение через Data для любого из объектов чтобы создать нужны структуры (обычно для первого Object'a ), а затем уже заполнять по индексу остальные Objects в любой последовательности (не обязательно подряд). vItem.Data['T'] := 'Text' // Data['T'] - это текст ListItem, так он стандартно обозначен Дальше уже добавляем текст в объекты через индекс: (vItem.View.Drawables[5] as TListItemText).Text := 'Text 5'; (vItem.View.Drawables[1] as TListItemText).Text := 'Text 2';
    1 балл
  2. ENERGY

    Кнопки у ListVew ItemAppearance

    Ребята, если вам нужна кнопка с картинкой на ListView, то это можно сделать скомбинировав картинку с кнопкой . Сначала добавляете TTextButtonObjectAppearance, затем TImageObjectAppearance и устанавливаете картинку поверх кнопки. Чтобы определить по какому элементу Item'a кликнул юзер: procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemDrawable); begin if ItemObject = nil then exit; ShowMessage('Name: ' + ItemObject.Name + sLineBreak + 'Text: ' + (ItemObject as TListItemText).Text); end;
    1 балл
  3. Огромное спасибо Равиль! Как хорошо что вы помогаете. Итак для тех кто не знает, в TListView есть режим DynamicAppearance , который позволяет добавлять предустановленные элементы - картинки, текст, GlyphButon. В хелпе написано что их может быть любое количество. Итак добавляем TListView, в панели Structure выбираем TListView > ItemAppearance > Item. В инспекторе объектов выбрать свойство Appearance и комбобоксе Dynamic Appearance. Рядом в инспекторе появится свойство Objects - нажать на него и там уже добавляем нужные поля. Там же можно переименовать поле, в AppearanceObjectName чтобы позже использовать в RunTime. У меня периодически на этих этапах вылетает Catastrophic Failure и среду приходится терминировать с диспетчера (Berlin Update 2). Дальше, жмем правой кнопкой мыши по ListView и выбираем Toggle Design Mode, где можно увидеть эти добавленные Custom поля и расставить их мышкой и указать выравнивание. Это имя затем можно использовать в Runtime, для картинки это индекс в ImageList, который нужно указать в ListView таким образом (за это еще раз спасибо Равилю! :), почему это сделали так неочевидно и почему это не указано в мануале, остается загадкой.. Для TImageObjectAppearance с именем Star - ListView1.Items.Add.Data['Star'] := Integer(1); Например заполняем список с картинками с индексами 0 и 1: procedure TForm5.FormShow(Sender: TObject); var I: Integer; begin for I := 0 to 9 do begin with ListView1.Items.Add do begin Text := 'Item ' + I.ToString; Data['Star'] := Integer(I mod 2 = 0); end; end; end; Переключаем с картинки с индексом 1 на 0 и наоборот. procedure TForm5.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem); begin AItem.Data['Star'] := AItem.Data['Star'].AsInteger xor 1; end ;
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...