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

RoschinSpb

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

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

  • Посещение

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

    10

Сообщения, опубликованные RoschinSpb

  1. В 22.11.2016 в 09:40, krapotkin сказал:

    я бы не сказал, что FMX "не взлетела". Просто объем непосильный, а контора маленькая

    Реально все работает, не хватает производительности. Я выложил релизы на ПМ и АС.

    Вот когда все фичи допилят, нужен рефакторинг и оптимизация.

    Думаю, у всех так

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


  2. Следует также не забыть установить стиль заливки TBrushKind.Solid

    Возможно стоит воспользоваться событием OnDrawColumnBackground при этом Options должно включать AlternatingRowBackground.

    16 часов назад, krapotkin сказал:

    проще уж все и нарисовать

    Подозреваю, что в данном случае — не :o)

  3. 4 часа назад, willi сказал:

    Ага! - оказалось, по умолчанию - при отключенных опциях - линии просто выключены

    Нету в канве ни чего по умолчанию. Что было в предыдущем рисовании то и осталось. Т.е. в общем случае значение Kind считаем неопределенным, хотя часто бывает что Kind=Solid поэтому на него обычно забивают, но это неправильно.

    Вариант

             LBM := TBitmap(Value.AsObject);
             Canvas.DrawBitmap(LBM,RectF(0,0,LBM.Width,LBM.Height),Bounds,1);

    у вас не работает?

  4. 8 часов назад, willi сказал:

    в данном случае - это не объект

    Вы меняли значение BlobType как я предложил в предыдущем сообщении? У меня работает

          ///  Эта часть не работает!
          ///
          if (Value.IsEmpty=false) and (Value.IsObject=true) then  
           begin
    //         LB:=TBlobField(Value.AsObject); // ужос!!!
    //         LB.SaveToStream(LStr);
    //         LBM:=FMX.Graphics.TBitmap.CreateFromStream(LStr);
    //          try
    //            Canvas.DrawBitmap(LBM,RectF(0,0,LBM.Width,LBM.Height),Bounds,1);
    //            finally
    //            LBM.Free;
    //          end;
             LBM := TBitmap(Value.AsObject);
             Canvas.DrawBitmap(LBM,RectF(0,0,LBM.Width,LBM.Height),Bounds,1);
           end;
          ///
          ///
          ///

    И вообще без обработчика события тоже всё рисуется.

    Цитата

    Как видно -- все равно остается некоторое пространство вокруг ячеек

    Это некоторое расстояние называется разделительная линия.

  5. В 14.10.2016 в 18:42, willi сказал:

    Спасибо за информацию B) - я скачал демку - но там особенность в том, что картинки хранятся в TImageList  - а в качестве переменной для столбца TGrid - индекс этого списка,как я понял...  ---   меня же интересовала ситуация с Blob-картинками в полях  - например, как в старых примерах с рыбками - в XE8 та же табличка у меня с Blob работала - я постараюсь сделать отдельный воспроизводимый пример...

    Как я понимаю, BlobType должно быть ftGraphic
    Graphic.png

    GraphicField.png

    Live Binding это не мой конек.

    fsBitmap.jpg

  6. 1. У колонки можно менять свойство Padding.
    2. Grid теперь может быть и стилевым и нативным. В нативном этого события быть не может. Чтобы работать со стилями см. стилевое представление грида TStyledGrid в модуле FMX.Grid.Style.pas. 
    3. По моему мнению проколом было наличие этих свойств в публичной секции. Grid это составной компонент, он неким образом самостоятельно реагирует на события мыши, если Вы будете делать что-то своё, то ваши действия могут войти в противоречие со стандартным поведением этого компонента и непредсказуемым последствиям. Поскольку грид переписан чуть менее чем полностью я посчитал, что это хороший повод убрать потенциальную уязвимость, здесь указаны все упраздненные события. В этом обсуждении я пытался объяснить что можно сделать.
    4. По этому поводу трудно что-то сказать навскидку, пишите в QC, не забудьте приложить простой воспроизводимый пример.
    5. Да, дело в совместимости. Фон может содержать картинку, поэтому по умолчанию все ячейки прозрачные. Но, если добавить AlternatingRowBackground в Options, то событие будет вызываться. Также оно вызывается при появлении редактора. Вообще сильно рекомендую посмотреть демку GridDemo, там можно в run-time менять настройки и смотреть в логе все приходящие события.

    GridDemo.png

    Еще здесь я что-то писал.

  7.  

    6 часов назад, kami сказал:

    а как активируется iOS-овская реализация грида?

    В Berlin'e — да, надо руками добавить модуль FMX.Grid.iOS в проект и хотя бы в один раздел uses, ну и не забыть ControlType грида установить в Platform.

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

  8. 6 часов назад, kami сказал:

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

    вот как-то так получается, что бóльшей части пользователей FM требуется именно поддержка платформ, потому, что если не требуется, то более разумно использовать vcl+100500 других библиотек. Все-таки специально заточенные под конкретную платформу библиотеки всегда будут проще и лучше, как кофемолка всегда (при прочих равных условиях) будет проще и лучше молоть кофе чем кухонный комбайн. Но это лирика...

    Здесь идея состоит в том, что надо разделить платформонезависимую и платформозависимую части. По этому все наследники TColumn и TCustomGrid ни чего не знают о TDefaultEditor, TStyledGrid... и наоборот. В этом случае можно реализовать свой редактор для TStyledGrid и при этом не убить TiOSGrid. 

    TColumn таким образом потерял всю функциональность связанную с отображением чего-либо, это мог бы быть вообще не TControl, а, например, TCollectioltem, но оставлен как есть для совместимости. 

    Если очень хотите опубликовать TDefaultEditor и пр. напишите в QC. Хотя мне кажется там реализация слишком тривиальна, чтобы что-то еще наследовать. Есть три (два с половиной) необязательных интерфейса ICellControl, IDrawableCell, IDrawableCellEx, которые можно реализовать, по образу и подобию.

    В FMX.Grid.iOS все редакторы опубликованы, но там реализация совсем другая.

  9. В 04.10.2016 в 14:45, kami сказал:

    Ну вот зачем надо было выносить создание редакторов в FMX.Grid.Style.pas, в TStyledGrid?

    Да еще жестко зашивать "какие редакторы могут быть созданы" в function TStyledGrid.GetEditorClass?

    То есть теперь, получается, если нужен свой InplaceEditor, то мало создать свой класс TColumn, нужно еще перекрывать TStyledGrid...

    Потому, что кроме TStyledGrid есть еще TiOSGrid, а в перспективе по одному на каждую платформу. И на каждой платформе своя нативная реализация ячеек и редакторов ячеек для каждого типа TColumn. На мобильных дэвайсах реализация вообще радикально другая, контролы не рисуются на канве, а используются системные объекты это приводит к некоторым ограничениям, но зато даёт ощутимый выигрыш по скорости отрисовки. 

    Так что увы прикрутить по быстрому свой редактор не получится.

  10. >> видеть координатки не выходя из окна
    >> смущает наличие еще пары чисел Width / Height
    Т.е. я правильно понимаю? В первом предложении предлагается продублировать 4 числа, во втором смущает наличие двух чисел? А наличие 4 чисел в редакторе объекта, который их не использует, не будет смущать?

    Боюсь ни чем не смогу помочь. Пользуйтесь Paint.

  11. 3 часа назад, Rusland сказал:

    С директивами дебагер плохо работает?

    Нет, там перестают работать все навороты редактора (кодкомплит, переходы по клику, хэльпинсайд)

  12. 2 часа назад, Blind_Cat сказал:

    Это получается код под разные платформы в одном файле. А этого хочется избежать.

    Нет это получается в юните есть код под одну платформу, а во всех остальных платформах он с точки зрения компилятора пустой.

  13. Обидеть художника каждый может.
    Не каждый может убежать.

    При двойном клике на картинке в Selected Image появляется обычный редактор MultiresBitmap, немодальный. Вы можете перемещать прямоугольник и видеть как меняются его координаты, и размеры в масштабе 1. Можно загружать и несколько общих картинок, главное, чтобы все лежало на своих местах с учетом масштабов. 

    Img1.png

    Также Вы можете менять координаты и размеры и видеть как перемещается выделенный прямоугольник. Если навести мышь на картинку, то появляются две кнопочки, с помощью которых можно перемещать прямоугольник пошагово (на значение ширины и высоты). Любые изменения сразу же отображаются во всех окошках. 
    Img2.png

    Вроде и статьи написаны, и видео выложено, если ни чего не помогает, можно воспользоваться более удобными профессиональными редакторами (напр. Photoshop) и подготовить изображение, где все картинки уложены в свои клеточки. Тогда при добавлении этого изображения оно будет автоматически нарезано на одинаковые прямоугольники.

  14. Можно кактотак обернуть весь код в IFDEF. Тогда можно компилировать под любой платформой.
    Но в процессе написания и отладки рекомендую все-таки закомментировать диррективы условной компиляции, а в окончательном варианте раскомментировать. 

    unit UnitWindows;
    //{$IFDEF MSWINDOWS}
    interface
      ...
    implementation
      ...
    initialization
      ...
    finalization
       ...
    //{$ELSEIF} 
    //implementation
    //{$ENDIF}
    end.
  15. А вот есть такая конторка, Microsoft называется, так она целый Excel для мобильников сделала :) 
    В целом конечно надо с особой осторожностью подходить к использованию таблиц в мобильных устройствах да и вообще учитывать некоторые особенности при разработке интерфейса, но это уже вопросы второго порядка. В идеале к которому мы стремимся: то, что работает на дэсктопе должно работать и на телефоне без переделок.
    OnDblClick в public как был так и остался.
    В следующей версии в Published должны появиться

      TCellClick = procedure(const Column: TColumn; const Row: Integer) of object;
        property OnCellClick;
        property OnCellDblClick;

    Будут срабатывать в таком порядке
    OnSelectCell([StringGrid1] 4; 8)
    OnSelChanged([StringGrid1] 4; 8)
    OnCellClick([StringGrid1] Progress; Row: 8)
    OnCellDblClick([StringGrid1] Progress; Row: 8)

    но это секрет и оффтоп в данной теме.

  16. По существу вопроса. Обратите внимание SelectCell срабатывает при возможной смене ячейки т.е. не всегда. Раньше, я смотрю, событие срабатывало при попытке выделить "дизабленную" ячейку, и фактически ни чего не происходило, но событие срабатывало.

    Если между нажатием и отпусканием вы перемещаете палец, то это интерпретируется как попытка перетащить содержимое. Т.е. касания должны быть как бы более акцентированные что ли, чтобы сменить выбранную ячейку.

    Вообще говоря не стоит строить свой алгоритм на предположении что Tap и SelectCell жестко связаны. Переход  к другой ячейки может осуществляться многими способами, стрелками, кнопками навигации, по по нажатию на клавишу ввода и т.п. Tap не срабатывает при использовании мыши.

    Воспроизвести двойное срабатывание SelectCell мне не удалось. И всегда Tap срабатывает до SelectCell. Какое у вас устройство? Я попробую по-тестировать на нем, если Vitaldj разрешит :D

     

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