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

willi

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

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

  • Посещение

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

    3

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

  1. Исторически сложилась практика использования свойства Tag в контролах (например, для поиска в списке владельца).
    Наиболее часто встречается ситуация "ПОЛОС" в приложении - в дизайне создаю панель или TLayout - в ней размешаю набор контролов - это панель-образец, тут-то и используются тэги.

    При запуске динамически создаю набор из панелей-TLayout - и в них, в каждую, копирую все контролы из образца с установленными в образце свойствами.
    При работе затем нужно находить контролы по их панели-полосе для заполнения и отслеживания информации.

    Давным-давно был создан набор функций по "клонированию" контролов,  копированию значений некоторых нужных свойств, отысканию по Tag - причем, сделано было "в лоб", там же добавлен ряд функций для корректировки контролов - убрать линию заголовка TGroupBox, подровнять радиокнопки, назначить события из образца...

    Если кому-то нужно, - привожу ссылку на github https://github.com/willi-spb/Common/blob/master/FMX.FormFuncs.pas

    Интересует реализация подобных вещей - у кого есть готовые хорошие аналоги?

    Оговорюсь сразу - хранения информации в словарях TModel.Data  в приведенном модуле нет - для этого есть другой, однако, если кто-то использует и такие варианты, тоже хотелось бы посмотреть.

    Мне кажется, в разработке подобные вещи могут пригодится...

  2. Заменил одну кривую графика на функцию синуса:

    Код: вместо линейной функции точек:
       Lx:=-20; Ly:=0;
       for i :=0 to 300 do
        begin
         Larea.Curves.Last.Points.Add(TcvPoint.Create(i,Lx,Ly));
         Lx:=Lx+2; Ly:=120+50*Sin(Lx*0.04);
        end;

    Видно, что для этой данной кривой выводятся не все значения точек, а только указанные...

     

    FMX_Graph2.jpg

  3. Видимо, пример слишком простой ? -- Вы правы, между точками интерполяция идет прямыми линиями, но если задать в исходных Y=Func(X) синусоиду или случайный процесс - как назвать график, который получится в итоге - обычно называют "кривой"...   Выводить в показ маркеров можно не все значения точек, а выборочно...

  4. Написал в XE10.1 простой модуль для вывода кривых на TImage  в виде графика - есть возможность вывода столбцов для диаграмм, меток с надписями и прочей мелочи.

    В виде компонента не оформлял...    Смысл: вводим массив точек - график сам подбирает область вывода чтобы влезли надписи и выводит с указанными параметрами и стилем кривые (имею в виду зависимости Y от X).
    Есть комментарии в коде - есть пример для тестов - см. проект https://github.com/willi-spb/arTrassing

    желательно тестирование, возможно я что-то упустил - сам модуль: https://github.com/willi-spb/arTrassing/blob/master/FMX.arCurveClasses.pas

    FMX_Graph.jpg

  5. Ага! - оказалось, по умолчанию - при отключенных опциях - линии просто выключены - позабыл я еще попробовать Kind=Solid -_-      В общем - пока у меня локальный вывод: при рисовании ячеек в TGrid очень желательно выставлять полностью всё перед началом вывода на Canvas:  включая также Padding=0.
     

  6. 2. В отношении разделительных линий:

    Я отключил прорисовку линий в Options   TGrid - при этом прямоугольник заполняется полностью - границ нет, однако, в этом режиме (таблица без линий) есть другая особенность: любые команды типа Canvas.DrawRect  Canvas.DrawLine  Canvas.Draw...   ничего на канву не выводят - т.е. границу так не нарисовать.    Это - если кто-то столкнется со странностями при прорисовке каких-то контуров в ячейках...    

    Vitaldj  см. пункт 1 в моем первом сообщении этой темы

     

  7. procedure TForm18.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
      const Column: TColumn; const Bounds: TRectF; const Row: Integer;
      const Value: TValue; const State: TGridDrawStates);
    ///
     var LB:TGraphicField;
         LBM:FMX.Graphics.TBitmap;
    begin
      if Column.Index=1 then
       begin
         try
          Canvas.BeginScene;
          CoLumn.Padding.Rect:=rectF(0,0,0,0);
          Canvas.Fill.Color:=TAlphaColorRec.Green;
          Canvas.FillRect(Bounds,0,0,[],1);
          Canvas.Stroke.Color:=TAlphaColorRec.red;
          Canvas.DrawRect(Bounds,0,0,[],1);
          if (Value.IsEmpty=false) and (Value.IsObject=true) then
           begin
             LB:=TGraphicField(Value.AsObject);
              LBM:=FMX.Graphics.TBitmap.Create;
              try
                LBM.Assign(LB);
                Canvas.DrawBitmap(LBM,RectF(0,0,LBM.Width,LBM.Height),Bounds,1);
                finally
                LBM.Free;
              end;
           end;
          finally
            Canvas.EndScene;
          end;
       end;
    end;

    Спасибо Сергею Рощину - получилось. :) Действительно, нужно обязательно указать тип поля  ftGraphic в свойстве BlobType у полей таблицы TFDMemTable   -   Причем, мне пришлось заново перезацепить LiveBinding для таблицы и чуть подправить код  события - см. выше  -у меня в старом моем варианте для поля ftGraphic выдавалась AV на чтение потока (позже посмотрю - почему).

  8. А вот какой эффект получается при добавлении в событие:
    Padding=0  -->
     CoLumn.Padding.Rect:=rectF(0,0,0,0);
          Canvas.Fill.Color:=TAlphaColorRec.Green;
          Canvas.FillRect(Bounds,0,0,[],1);
          Canvas.Stroke.Color:=TAlphaColorRec.red;
          Canvas.DrawRect(Bounds,0,0,[],1);
    Как видно -- все равно остается некоторое пространство вокруг ячеекSacee.png

  9. Вот пример с блобами - как видно есть по умолчанию отступ и не работает перерисовка по событию - OnDrawColumnCell  - я привожу вариант этого обработчика как в ХЕ8  - но Value - в данном случае - это не объект - и видно только закрашенный прямоугольник...   Вверху над таблицей я добавил TImageControl - у него при проходе по таблице поле отображается корректно (привязка LIveBinding)

    Min_test.zip

     

    (Кстати - если не использовать обработчик - выводятся пустые ячейки столбца с блобом)

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

  11. При переходе на Delphi 10.1 Berlin (FMX) с XE8  возникает много "интересных" нюансов с TGrid:

    1. У меня все(!) внутренние ячейки выводятся с отступом в 3px (я перерисовываю их в событии OnDrawColumnCell)  от всех сторон - при этом внутри уже по умолчанию используется отсечка по области рисования (т.е. если задать большую область для, к примеру, FillRect - всё равно будет заполняться только с отступом 3px) - мое решение - локально создать
      var L_Rects:TClipRects;  и var L_Bounds:TRectF;
     --------->  L_Bounds:=Bounds;
      L_Bounds.Inflate(3,3); // ! - компенсировать отступ
      SetLength(L_Rects,1);
      L_Rects[0]:=L_Bounds;
      /// - далее
      with aGrid do
       try
        Canvas.BeginScene(@L_Rects); // !!

    ..... рисуем на Canvas

     finally Canvas.EndScene; SetLength(L_Rects,0);
    end;

    2. Из Published исчезло событие OnApplyStyleLookup - приходится вызывать его где-то при показе таблицы вручную...

    3. Также исчезли события OnMouseUp  и OnMousDown  - похоже на прокол разработчиков - они есть в Public - их нужно прицеплять в коде выставляя их на свои методы формы (параметры методов такие же как и в XE8).

    4. LiveBinding у меня не работает для полей с Blob - картинками - при вызове OnDrawColumnCell - для такого вида привязки параметр const Value: TValue  или пустой, или (в зависимости от стиля столбца) содержит строку "(Object)" - как показать в таблице blob-поле - картинку  в XE10 с помощью Livebinding я так и не понял... :(
    5. Непонятно зачем нужно событие OnDrawColumnBackground - по-моему, оно никогда не срабатывает - совместимость со старыми версиями?
    ____________

    Напишите, если кто-нибудь сталкивался с этими моментами и нашел какой-то другой ответ - хотелось бы использовать LiveBinding как в XE8 и ранних версиях...

     

  12. Там всё сделано, по сути, через процедуру декодировки - планировалось дальнейшее развитие и приведение в человеческий вид... Сейчас, к примеру, не так, как хотелось бы, сохраняется дерево вложенных объектов (вернее вообще никак)...  Но для копирования - удаления, очистки набора стилей и некоторых вещей мне лично хватает.
       Очистка, кстати, позволяет хранить отдельно, например, стили кнопок или прогрессбара и втыкать их в свои наборы стилей по необходимости

    fmxStyleEditor.zip

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