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

Как можно реализовать таблицу?


gresaggr

Вопрос

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

  • 0
  • Модераторы
2 часа назад, sinuke сказал:

а можно и в листвью рисовать

С условием, что все ячейки одинаковые будут

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

Для таких таблиц лучше ее рисовать на ListView. Пока не видел достойных гридов для Андроид.

Пример реализации:

Спойлер

//Обрабатываем событие отрисовки
procedure TBaseView.lvBaseUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
var
    item : TListViewItem;
begin
    item :=  AItem;
    //предотвращаем повторную прорисовку
    if item.Tag = TAG_UPDATE then
        exit;
    item.Tag := TAG_UPDATE;
    case item.Purpose of
        //рисуем заголовок
        TListItemPurpose.Header :
        begin
            item.UpdateHeader;
        end;
        //рисуем строку
        TListItemPurpose.None :
        begin
            item.UpdateItem(BookCashier[item.Index - 1].Values);
        end;
    end;
end;

 


//для моей задачи было достаточно задать размеры константами, т.к. экран был задан заранее.
const
    RH = 25;
    CW = 66.5;
    TAG_UPDATE = 10;
//UpdateHeader аналогичен этому
procedure TListViewItemHelper.UpdateItem(const AValues: TArray<string>);
var
    i, count : integer;
begin
    count := Length(AValues) - 1;
    for i := 0 to count do
    begin
        CreateText(0 + i, 0, 1, 1, AValues[i]);
        CreateLine(0 + i, 0, 1, TLineType.ltV);
    end;
end;

function TListViewItemHelper.CreateLine(ACol, ARow, ARowCount: integer;
  ALineType: TLineType): TListItemObject;
var
    lineItem :  TListItemImage;
begin
    lineItem :=  TListItemImage.Create(self);
    lineItem.PlaceOffset.X := CW - 1 + ACol * CW;
    lineItem.PlaceOffset.Y := 0 + ARow * RH;
    case ALineType of
        ltH:
        begin
            lineItem.Height := 1;
            lineItem.Width := CW * ARowCount;
        end;
        ltV:
        begin
            lineItem.Height := ARowCount * RH;
            lineItem.Width := 1;
        end;
    end;
    lineItem.Visible := true;
    //bitmap - просто черный фон, рисуем сетку)
    lineItem.Bitmap := self.Bitmap;
    lineItem.ScalingMode := TImageScalingMode.Stretch;
    lineItem.Opacity := 0.3;
    Result := lineItem;
end;

function TListViewItemHelper.CreateText(ACol, ARow, AColCount,
  ARowCount: integer; AText: string): TListItemObject;
var
    textItem : TListItemText;
begin
    textItem :=  TListItemText.Create(self);
    textItem.PlaceOffset.X := 0 + ACol * CW;
    textItem.PlaceOffset.Y := 0 + ARow * RH;
    textItem.Width := CW * AColCount - 1;
    textItem.Visible := true;
    textItem.Text := AText;
    textItem.Height := RH * ARowCount - 1;
    textItem.TextAlign := TTextAlign.Center;
    textItem.TextVertAlign := TTextAlign.Center;
    textItem.WordWrap := True;
    textItem.Trimming := TTextTrimming.Character;
    textItem.Opacity := 1;
    textItem.TextColor := TAlphaColorRec.Black;
    textItem.Font.Family := 'Arial';
    textItem.Font.Size := 11;
    Result := textItem;
end;

 

 

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

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

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

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

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

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

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

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

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

×
×
  • Создать...