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

Лагает StrigGrid - Андроид


S_007

Вопрос

На форме StrigGrid подключенный к файлу базы SQLite, в котором есть два столбца и несколько строк, подключен FDConnection, BindSourceDB, FDQuery. В виндовс работает с первого щелчка, а на телефоне нужно 3-5 раз тапнуть по ячейке чтоб она выделилась и перевелась в режим редактирования. Подскажите пожалуйста из-за чего так происходит? Что нужно учесть чтоб не было таких тормозов? Delphi 10.2, тестировал на телефоне с Android 4.2

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

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

  • 0

Я бы на твоем месте для мобильных платформ не использовал сетку(ну максимум для отображения). Лучше использовать TListView + форму/фрейм для редактирования данных выбраного элемента.

 

P.S. для FMX у меня и под винду идет редактирование в   форме/фрейме

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

TGrid прекрасно работает под мобильными платформами. Даёт куда больше возможностей кастомизации вывода чем TListView. Плюс не лагает в отличии от, так как лагать там нечему. Ещё бы на вью его бы посадили на мобильных платформах, и поправили проблемы с тачем, что бы пляски с бубном не устраивать каждый раз - вообще цены бы не было.
 

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

Akad гигантское спасибо! Я и не знал что есть такой компонент TGrid, сейчас буду пробовать.  В первом посте я написал для примера пару столбцов и строк, а на самом деле у меня их будет гораздо больше, если TGrid будет быстро работать то это то что надо

Спасибо! 

Ссылка на комментарий
  • 0
53 минуты назад, S_007 сказал:

печально что и в нём нельзя отредактировать через инспектор шрифт, высоту заголовка

Переопределите DrawColumnCell, и без проблемы выведите что как и где надо. TGrid - это конструктор. Все данные надо хранить у себя.

Переопределить прежде всего GetValue/SetValue.

Затем переопределить DrawColumnCell и рисовать в тех колонках, где нужен custom.

Вот образец переопределения (то как рекомендует рисовать эмбо - загон ещё тот, лучше туда вообще не смотреть)

procedure CScriptRunner.StringGrid1DrawColumnCell(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
  const Row: Integer; const Value: TValue; const State: TGridDrawStates);
const
  HorzTextMargin = 0;
  VertTextMargin = 0;
var

  TextLayout : TTextLayout;
  TextRect: TRectF;
  center : TPoint;
  bmp:TBitmap;
  Val: TValue;
  color : DWORD;
  BlinkColumn : boolean;
  s, s2:string;
  p:integer;
  tm : TDateTime;
  Bou2: TRectF;
begin
  // Например мы не хотим рисовать в колонках с чек боксами
  if Column is TCheckColumn then
  begin
     exit;
  end;
// Например хотим менять цвет для визуального отделения строк

    TextRect := Bounds;
    case Row mod 4 of
       0:Canvas.Fill.Color := $FFFFFFFF;
       1:Canvas.Fill.Color := $FFF8F8F8;
       2:Canvas.Fill.Color := $FFFCFCFC;
       3:Canvas.Fill.Color := $FFF5F5F5;
    end;
    TextRect.Left := TextRect.Left-5;
    TextRect.Bottom := TextRect.Bottom;
    TextRect.Inflate(-HorzTextMargin+12, -VertTextMargin);
    Canvas.FillRect(TextRect, 0, 0, AllCorners, 1);
    TextRect := Bounds;
//выводим текст

        canvas.Fill.Color := color
       canvas.Font.Family := 'Calibri';
       canvas.Font.Size := g_ProntFontSize;
       Canvas.FillText(TextRect,Value.ToString,false,100,[], TTextAlign.Leading,TTextAlign.Leading);

end;
 

Главное, что тут можно отрисовать картинку, обратиться например

 (Sender as TGrid).OnGetValue(Sender,-1,Row, val);

color := val.AsUInt64;

 

у меня на -1 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
 

Ссылка на комментарий
  • 0
26 минут назад, wamaco сказал:

TValueможно пример? как и для чего Вы переопределяете...

В смысле для чего? Что бы значениями заполнить таблицу. Он разве работает в каком-то другом режиме? На сколько я знаю только TStringGrid хранит значения в себе TGrid не умеет такого.

У меня достаточно сложный код:



procedure CTableElement.Grid1GetValue(Sender: TObject; const ACol,
  ARow: Integer; var Value: TValue);
begin
   if ARow >= Length(CellValue) then
   begin
      assert(false);
   end;
   if ACol >= Length(CellValue[ARow].cols) then
   begin
      assert(false);
   end;
   if ACol = -1 then
   begin
      Value := CellValue[ARow].color;
      exit;
   end;
   if ACol = -2 then
   begin
      Value := CellValue[ARow].isBlinking;
      exit;
   end;

   Value := CellValue[ARow].cols[ACol].GetVal;
end;

Т.е. у меня описан цвет строки, её мигание.

GetVal у меня TValue. В нём может быть текст или картинка.

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

Akad огромнейшее спасибо! Еще одна проблема, если редактировать нижние ячейки то появившаяся клавиатура перекрывает её

как можно победить это несчастье, чтоб грид подтягивал эту строку вверх?

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

Еще одна проблема, если редактировать нижние ячейки то появившаяся клавиатура перекрывает её

К сожалению, это один из бесчисленных глюков FMX, тянущихся с самого начала компиляций под мобильные платформы. Сторонний компонент обычно помогает.

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

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

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

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

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

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

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

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

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

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

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