vložil Radek Červinka
7. prosince 2022 19:17
TListView ve FMX má celkem zajímavé možnosti, které nejsou na první pohled dostupné a některé si ukážeme.
Ďábel se skrývá v detailu a zde to fakt na první pohled není patrné. Pokud použijeme TListView, lze u něho celkem komplexně nastavit jak mají vypadat položky. Příklad na předchozím screenshotu se dá udělat přímo v objekt inspektoru. Klíčová věc je dobrá volba property ItemApperance, kde jsem vybral mód "položka s image a detailem dole a tlačítkem vpravo" a pak se u jednotlivých částí nastavení ItemApperanceObject dají specifikovat jednotlivé elementy v jednotlivých módech.
ve fmx to pak vypadá
object lstCalendar: TListView
ItemAppearanceClassName = 'TImageListItemBottomDetailRightButtonAppearance'
ItemEditAppearanceClassName = 'TImageListItemBottomDetailRightButtonShowCheckAppearance'
HeaderAppearanceClassName = 'TListHeaderObjects'
FooterAppearanceClassName = 'TListHeaderObjects'
Images = ImageList1
Align = Client
Size.Width = 529.000000000000000000
Size.Height = 577.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
ItemAppearance.ItemHeight = 150
ItemAppearanceObjects.ItemObjects.Text.Font.StyleExt = {00070000000000000004000000}
ItemAppearanceObjects.ItemObjects.Text.TextColor = claNavy
ItemAppearanceObjects.ItemObjects.Text.Height = 20.000000000000000000
ItemAppearanceObjects.ItemObjects.Text.PlaceOffset.Y = 4.000000000000000000
ItemAppearanceObjects.ItemObjects.Detail.TextVertAlign = Leading
ItemAppearanceObjects.ItemObjects.Detail.WordWrap = True
ItemAppearanceObjects.ItemObjects.Detail.Height = 120.000000000000000000
ItemAppearanceObjects.ItemObjects.Detail.PlaceOffset.Y = 30.000000000000000000
ItemAppearanceObjects.ItemObjects.TextButton.Text = '…'
ItemAppearanceObjects.HeaderObjects.Text.Font.StyleExt = {00070000000000000004000000}
OnButtonClick = lstCalendarButtonClick
end
Ok, teď máme definován vzhled (který může být mnohem komplexnější) a je třeba nějaké oživení, resp. plnění
var
oItem:TListViewItem;
x, z: Integer;
begin
lstCalendar.BeginUpdate;
try
lstCalendar.Items.Clear;
for z := 1 to 10 do
begin
oItem := lstCalendar.Items.Add;
// oItem.TagObject := nejaky_objekt_kdyz_je_treba;
oItem.Text := Format('Položka %d - %s (souborů: %d)', [z, FormatDateTime('dd.mm.yyyy hh:nn', Now), Random(3)]);
oItem.Detail := Format('%s', ['random text']);
oItem.ImageIndex := 7;
end;
lstCalendar.Selected := lstCalendar.Items[5];
finally
lstCalendar.EndUpdate;
end;
Text, Detail atd. odpovídají sekcím nahoře, tj. např. Text.TextColor = claNavy je ten modrý nadpis. Tlačítko může vypadat jinak, dají se specikovat checkbox u položky, atd. Ale myslím, že principiálně to stačí.