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

Akad

Пользователи
  • Постов

    152
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Активность репутации

  1. Like
    Akad отреагировална ENERGY в Что невозможно сделать на Delphi для Android?   
    Нет как раз таки. Berlin Update 2 более стабильный и там меньше багов FMX чем в Tokyo. В Токио от одного бага со сменой главного потока целая эпопея, с потерей производительности и проблем с анимацией - много что посыпалось. Была, а может еще и будет.  Некоторые программисты с форума EMBT вообще считают Токио самой неудачной версией Delphi, в плане багов за всю ее историю. 
  2. Like
    Akad получил реакцию от МихаилЪ чайковЪ в Что невозможно сделать на Delphi для Android?   
    Вопрос не в том, что можно или не можно принципиально сделать, а в том на сколько это потом будет работать у пользователя. Так вот например в текущей версии (10.2.2) можно добиться, что установленное с помощью шнура и adb приложение будет работать стабильно. Но потом берём удаляем это приложение через диспетчер, ставим этот же apk и получаем крэш на старте в дебрях fmx. Очищаем данные с помощью кнопки в диспетчере приложений, и прога (о чудо!) работает без сбоев. Вот подобные проблемы сводят на нет все старания. Когда у вас на отладочных телефонах всё работает нормально, а в плей марките вам единицы ставят да ещё и в отзывах ругают.

     
  3. Like
    Akad отреагировална Евгений Корепов в Кто хорошо знает внутреннюю структуру FMX?   
    После переделки с TThread.Synchronize на TThreadedQueue приложение отработало 12 часов без проблем. Ни ошибок, ни утечек. Так что думаю проблема не в моем коде, а именно в TMonitor. 
    Правда на тестовом приложении, с 7 потоками и синхронизацией TThread.Synchronize воспроизвести проблему не удалось, так что черт его знает на каком этапе начинает глючить.
  4. Like
    Akad отреагировална kami в Кто хорошо знает внутреннюю структуру FMX?   
    Есть дикое ощущение, что могли поломать синхронизацию через TMonitor.Wait.
    В Телеграме обсуждали подобный глюк, по stacktrace было похоже на это.
  5. Like
    Akad получил реакцию от Равиль Зарипов (ZuBy) в Invalid pointer operation   
    Именно то, что написано. И ничего более. А присина причины - уже надо выяснять под отладчиком или по логам.
     
  6. Like
    Akad получил реакцию от S_007 в Лагает StrigGrid - Андроид   
    К сожалению, это один из бесчисленных глюков FMX, тянущихся с самого начала компиляций под мобильные платформы. Сторонний компонент обычно помогает.
  7. Like
    Akad получил реакцию от Ingalime в Лагает StrigGrid - Андроид   
    В смысле для чего? Что бы значениями заполнить таблицу. Он разве работает в каком-то другом режиме? На сколько я знаю только 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. В нём может быть текст или картинка.
  8. Like
    Akad получил реакцию от #WAMACO в Лагает StrigGrid - Андроид   
    В смысле для чего? Что бы значениями заполнить таблицу. Он разве работает в каком-то другом режиме? На сколько я знаю только 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. В нём может быть текст или картинка.
  9. Like
    Akad получил реакцию от S_007 в Лагает StrigGrid - Андроид   
    Переопределите 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 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
     
  10. Like
    Akad получил реакцию от Ingalime в Лагает StrigGrid - Андроид   
    Переопределите 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 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
     
  11. Like
    Akad получил реакцию от S_007 в Лагает StrigGrid - Андроид   
    TGrid прекрасно работает под мобильными платформами. Даёт куда больше возможностей кастомизации вывода чем TListView. Плюс не лагает в отличии от, так как лагать там нечему. Ещё бы на вью его бы посадили на мобильных платформах, и поправили проблемы с тачем, что бы пляски с бубном не устраивать каждый раз - вообще цены бы не было.
     
  12. Like
    Akad получил реакцию от FREEFAR в Асинхронный NetHTTPClient   
    Делаем отдельный поток, в нём пул http клиентов (array of). Ну и добавляем запрос через lock, успешный запрос обрабатываем через Synchronize.
    Или делаем отдельный класс-наследник TThread, опять array of и запускаем в каждом экземпляре обращение к сайту в нужный момент. Возврат значения через callback или  Synchronize. Только в этом случае надо не забывать удалять ресурсы завершившихся потоков в главном.
     
  13. Like
    Akad получил реакцию от rareMax в Нужен нормальный JSON парсер   
    Нашёл SuperObject, он из ~1500 JSON проглючил всего на 4-х. Хотя online парсеры эти 4 кушают без проблем. Уже результат. Но всё же хочется лучше. Не думал, что парсинг структурированного текста хоть как-то сложная задача...
     
  14. Like
    Akad получил реакцию от S_007 в Программное управление подсветкой экрана   
    http://www.fmxexpress.com/configure-android-system-settings-from-delphi-xe5-firemonkey/
    Там SCREEN_OFF_TIMEOUT, яркость по аналогии.
    P.S. Что бы перевести какой-то код с андоидовской явы на FireMonkey, я в гугле спрашиваю это словосочитание, плюс прибавляю FireMonkey. В данном случае что-то типа:
    Запрос
    Способ срабатывает в ~95%.



     
  15. Like
    Akad получил реакцию от sargon в [Windows] Сворачивание приложение   
    Может где тему отдельную завести "исправляем ошибки в fmx сами", где наработки подобные собирать? Сегодня часа 4 убил, что бы найти ошибку разработчиков, что бы TLabel всегда выводил правильный шрифт после обновления информации в себе. Кому интересно, файл FMX.Objects.pas, procedure TText.DoSetText(const Value: string);Ищем строчку
    FLayout.LayoutCanvas := Canvas;
    после неё вставляем
    FLayout.Font := Self.Font;

     
  16. Like
    Akad получил реакцию от Kitty в Мусор при развёртывании приложений   
    Ничего в этом плане с 7 версии не изменилось. Единственный надёжный что-то вычистить в студии способ - это far, alt+7, *.*, и искать все упоминания в данном случае файлов от DevExpress/FireDAC...
    Эта проблема из той же серии, что когда проект копируешь в другую папку, и начинаешь там без предварительной подготовки что-то править, то правишь старые файлы а не скопированные. Подобных ммм... "фишек" у студии куча. Надо или мириться, или переходить на что-то другое. В последней версии (10.2-10.2.2) они даже ctrl+пробел сломали, а Вы  про автоматическую прочистку лишних bpl.
     
  17. Like
    Akad получил реакцию от Rusland в [ANDROID] Смена USER-AGENT компонента Webbrowser   
    А способ через настройки не работает?
    var WebBrowser: JWebBrowser; begin WebBrowser := GetField<JWebBrowser>('FJWebBrowser'); if (WebBrowser <> nil) then WebBrowser.getSettings.setUserAgentString(StringToJString(iUA)); end; https://forums.embarcadero.com/thread.jspa?threadID=236124
    Это естественно для анроида. Для вин через его апи и т.д.

     
  18. Like
    Akad получил реакцию от Вольдемар в TMemo постранично   
    У читалок есть много сложных загонов с выводом. Например из-за шрифтов, отступов и т.д. Если бы я просто отображал постранично текст,  бы сделал следующее: закачал бы в какой-нибудь stritglist весь файл, потом начал построчно рисовать в канву с переносом. И как только высота превышала бы максимум, создавалась бы следующая страница. Всё.
     
×
×
  • Создать...