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

willi

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

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

  • Посещение

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

    3

willi стал победителем дня 22 июня 2018

willi имел наиболее популярный контент!

Информация

  • Пол
    Мужчина
  • Город
    Санкт-Петербург

Посетители профиля

986 просмотров профиля

Достижения 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; Видно, что для этой данной кривой выводятся не все значения точек, а только указанные...
  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
  5. Работает - главное, не вызывать нигде LBM.Free;
  6. Ага! - оказалось, по умолчанию - при отключенных опциях - линии просто выключены - позабыл я еще попробовать Kind=Solid В общем - пока у меня локальный вывод: при рисовании ячеек в TGrid очень желательно выставлять полностью всё перед началом вывода на Canvas: включая также Padding=0.
  7. 2. В отношении разделительных линий: Я отключил прорисовку линий в Options TGrid - при этом прямоугольник заполняется полностью - границ нет, однако, в этом режиме (таблица без линий) есть другая особенность: любые команды типа Canvas.DrawRect Canvas.DrawLine Canvas.Draw... ничего на канву не выводят - т.е. границу так не нарисовать. Это - если кто-то столкнется со странностями при прорисовке каких-то контуров в ячейках... Vitaldj см. пункт 1 в моем первом сообщении этой темы
  8. 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 на чтение потока (позже посмотрю - почему).
  9. А вот какой эффект получается при добавлении в событие: 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); Как видно -- все равно остается некоторое пространство вокруг ячеек
  10. Вот пример с блобами - как видно есть по умолчанию отступ и не работает перерисовка по событию - OnDrawColumnCell - я привожу вариант этого обработчика как в ХЕ8 - но Value - в данном случае - это не объект - и видно только закрашенный прямоугольник... Вверху над таблицей я добавил TImageControl - у него при проходе по таблице поле отображается корректно (привязка LIveBinding) Min_test.zip (Кстати - если не использовать обработчик - выводятся пустые ячейки столбца с блобом)
  11. Спасибо за информацию - я скачал демку - но там особенность в том, что картинки хранятся в TImageList - а в качестве переменной для столбца TGrid - индекс этого списка,как я понял... --- меня же интересовала ситуация с Blob-картинками в полях - например, как в старых примерах с рыбками - в XE8 та же табличка у меня с Blob работала - я постараюсь сделать отдельный воспроизводимый пример...
  12. При переходе на 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 и ранних версиях...
  13. учти тот момент, что эффекты и анимация одновременно для одного объекта не работают (в XE8)
  14. Вот исходники под XE8 - хотя, там позориться больше - замысел был, как часто бывает, хороший, но поскольку этот проект не оплачивается, пришлось отложить пока... fmx_decoder.zip
×
×
  • Создать...