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

как раскрасить Detail


walexw

Вопрос

Раньше писал на С++, сейчас пробую на Дельфи. Не получается простая вещь.
Надо выделить Detail по признаку

  lViewTour.BeginUpdate;
  lViewTour.Items.Clear;
  while not FDQuery.Eof do
  begin
    lvItem        := lViewTour.Items.Add;
    lvItem.Text   := FDQuery.FieldByName('name').AsString;
    lvItem.Detail := FDQuery.FieldByName('city').AsString;
    lvItem.Data['status'] := 'normal';
    if (FDQuery.FieldByName('status').AsInteger = 3) then
    begin
        lvItem.Data['status'] := 'red';
    end
    FDQuery.Next;
  end;
  FDQuery.Close;
  lViewTour.EndUpdate;
  lViewTour.Resize;
Дальше написал
procedure Tfrm.lViewTourUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean);
var
  TextObject: TListItemText;
begin
  TextObject    := AItem.Objects.FindDrawable('status') As TListItemText;
  if (TextObject = nil)  then
  begin
    TextObject       :=  TListItemText.Create(AItem);
    TextObject.Name  := 'status';
  end;
  TextObject.Visible :=  false;
  if (TextObject.Text = 'red') then
  begin
    AItem.Objects.DetailObject.TextColor := TAlphaColorRec.Red;
    AItem.Objects.TextObject.TextColor := TAlphaColorRec.Red;
  end
end;
По факту, у нужных записей текст перекрашивается в красный, а Детейл остается черным.
Мне же нужно именно Детейл перекрасить.
В чем ошибка?
На С++ я применял
TListViewItem::TListViewItemObjects *  _objects = (const_cast<TListViewItem*>(AItem))->Objects;
И обходился без lvItem.Data['status']
Как заставить Дельфи окрасить Детейл?
Спаибо!

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
14 часов назад, ZuBy сказал:

 AItem.Objects.DetailObject.IsDetailText := false;

 

Эта строчка просто "убила" раскраску по умолчанию (зеленую) сделав Детейл черным, хотя в коде написано TAlphaColorRec.Red;

Ссылка на комментарий
  • 1
  • Модераторы
var
  FUpdateLV: Boolean = false;

implementation

{$R *.fmx}

procedure TForm12.Button1Click(Sender: TObject);
var
  I: Integer;
  AItem: TListViewItem;
begin
  ListView1.ItemAppearance.ItemAppearance := 'ImageListItemBottomDetail';
  for I := 0 to 25 do
  begin
    FUpdateLV := false;
    AItem := ListView1.Items.Add;
    with AItem do
    begin
      Text := 'Random Text ' + IntToStr(I);
      Detail := 'Detail for ' + Text;
      if I mod 3 = 0 then
        Data['status'] := TAlphaColorRec.Red
      else
        Data['status'] := TAlphaColorRec.Green;
    end;
    FUpdateLV := true;
    ListView1.Adapter.ResetView(AItem);
  end;
end;

procedure TForm12.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem);
begin
  if not FUpdateLV then
    exit;
  if AItem.HasData['status'] then
  begin
    AItem.Objects.DetailObject.TextColor := AItem.Data['status'].asinteger;
  end;
end;

2016-10-11_16-01-19.png

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

Положил на форму Button, ListView, скопировал код ^^^

На строке    

AItem.Objects.DetailObject.TextColor := AItem.Data['status'].asinteger;

получаю Access Violation.

ListView надо сначала настроить как-то?

 

UPD: нашел, в LV ItemAppearance стоял ListItem, а надо было выбрать любой содержащий Detail

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
  • Модераторы
6 минут назад, Rusland сказал:

Положил на форму Button, ListView, скопировал код ^^^

На строке    


AItem.Objects.DetailObject.TextColor := AItem.Data['status'].asinteger;

получаю Access Violation.

ListView надо сначала настроить как-то?

ListView1.ItemAppearance.ItemAppearance := 'ImageListItemBottomDetail';

в ListItem нету Detail, поэтому и ошибка

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...