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

Zitto

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

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

  • Посещение

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

  1. Не знаю поможет ли.

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

    Оказалось, что 14 февраля закончился срок действия сертификата Apple Worldwide Developer Relations, который подписывает все остальные (на разработку и распространение). Если у вас так же, то ссылка решит проблему.  

  2. Приветствую! 
    Столкнулся с подобной проблемой. XE 10 и трехзвенка и при запуске приложения происходит связь с БД.

    На Win все отлично, однако если все запускать под Android в случае отсутствия связи висеть будет неприлично долго.

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

    Необходимо настроить TimeOut.

      sqlMainConnection.ConnectionData.Properties.Add( 'ConnectionTimeout', '2000' );

    не помогает.

    Странно, что вопрос не востребован в области мобильной разработки.

    Нашел репорт http://qc.embarcadero.com/wc/qcmain.aspx?d=80954 , но не решение.

    Очень хочется решить штатным способом, если не через инструментарий студии, то хоть правкой исходиков проекта.

    Задав, например, таймаут в его ресурсах.

    Решал кто подобные вопросы?

     

    Благодарю.

  3. R := 80;
      Canvas.BeginScene();
    
    
      Alpha := ((Sender as TPie).EndAngle+(Sender as TPie).StartAngle)/2;
      dX := (Sender as TPie).Width /2+ R * Cos(DegToRad(Alpha));
      dY := (Sender as TPie).Height/2 +R * Sin(DegToRad(Alpha));
      rct.Create(dX-5,dY-5,dX+5,dY+5);
      Canvas.DrawEllipse(rct,100);
      Canvas.EndScene();
    
    

    Благодарю!

    Сам делал чуть по другому.

    Ошибка была -отрицательные углы переводил в положительные.

    Может кому будет полезно:

    function pr( _r: Single; _sA: Single; _eA: Single; _Text: TText ): TPoint;
      Var
        i: Integer;
        t: real;
        r: real;  
      Begin
        r := _r / 2; //Радиус внутренней окружности
        i := Round( _eA - ( _eA - _sA )/2 );
        Begin
          t := i * pi / 180;
          Result := TPoint.Create(
            Round( r * cos( t )  + _r - Round( _Text.Width / 2 ) ),
            Round( r * sin( t ) + _r - Round( _Text.Height /2 ) ) );
          //Дополнительная корректировка на центр TText, при TText.WordWrap = False и TText.AutoSize := True
        End;
      End;
    
  4. Картинка для наглядности.

    Имеем компонент TPie, с высотой и шириной равной 100, координаты X=50;Y=50;

    Начальный угол 0, конечный 232.

    Радиус получается 50. Центр TText будет лежать на окружности с радиусом 25.

    Известен угол на котором должна располагаться надпись, в данном случае это 116.

    В идеале должна быть формула выявления координат X,Y для TText.

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

    В довесок, следующая область имеет отличный от 0 начальный угол (232), что делает необходимым учет четвертей.   

    post-457-0-58375400-1452263400.jpg

  5. Увы все не так просто. Идейно ясно, что середина любой закрашенной области на окружности находится в радиусе в два раза меньшем радиусу основной окружности.

    Всплывает необходимость переноса градусов на оси Х,У с учетом смещения выделенной области и периодами Pi.

    Что я в принципе и сделал, но результат не устраивает, поэтому ищу другую реализацию, возможно, заложенную в компонент. 

  6. Задается прямоугольник, который имеет прозрачную и закрашенную область. Наложением друг на друга можно построить полноценную диаграмму.

    Часть закрашенной окружности образуется начальным и конечным углом окружности.

  7. Приветствую!

    Собрался недавно сделать свою круговую диаграмму.

    Решил собрать из TPie и все вроде бы хорошо, но при желании проставить значения в закрашенный кусок диаграммы поймал себя на мысли,

    что найти центр закрашенной области не так то просто.

    Отсюда вопрос: Возможно есть готовое решение по поиску этих координат или, возможно, даже стандартная реализация через TRectF ?

     

    Смотрю, предыдущая тема похожа, и похоронена. Надеюсь мне повезет больше.

    Спасибо!

  8. Так же столкнулся с подобной проблемой.

    На Win все летает, IOS тормоза, Android нет анимации.

    День убил на тесты.

    Результат - анимация пользуется ресурсами телефона, коих меньше чем у ПК.

    Мне помогло:

    • Сжатие фона (на заднем фоне есть картинка),
    • Остальные эффекты добавлять после окончания анимации (есть gloweffect),
    • Игра с родителями - тут не совсем ясно, но путем тестов выяснилось, что чем меньше родительских контролов между объектом анимации и формой, тем меньше шансов на тормоза.

    Для мобильных платформ анимацией надо пользоваться осторожно.

  9. Проверить сейчас нет возможности, но я бы для начала попробовал поместить оба изображения в родительский контрол TRectangle со свойством ClipChildren=true для обрезки дочерних изображений, выходящих за границы контрола. Одну картинку растянул по Rectangle, а вторую поместил ровно под ним (через Image2.Position.X:=0, Image2.Position.Y:=Rectangle.Height). Она должна быть полностью "обрезана" нижней границей Rectangle. Ну а дальше через FloatAnimation уменьшаем Image2.Position.Y с начального значения до нуля за нужное время с задержкой в пару секунд.

    В таком случае надо двигать и image1 по оси Y, иначе будет эффект наложения, а не прокрутки.

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

     

    Есть вариант так же сделать через TListBox, создав 2 элемента списка с картинками и прокручивать его.

     

     TBitMapAnimation отлично справляется превращая набор картинок в gif изображение. Но там, насколько я помню, нет переходов между картинками.

     

    Возможно вы найдете нужным переход среди эффектов ( *TransitionEffect ).

  10. Вам необходимо переключиться в режим разработки под андроид, после зайглянуть в Project -> Deployment.

    Там следует добавить вашу БД и указать путь, где она будет храниться на устройстве : ".\assets\internal\test.s3db".

    Не забудьте изменить путь к БД у FDConnection.

  11. Попробуйте сделать через элемент TListBoxItemGroupHeader.
    Будет прокручиваться заголовок или нет, так же зависит от свойства GroupingKind контрола ListBox/

    Очевидно вам нужны заголовки ( TListBoxHeader или TListBoxGroupHeader ).
    Если необходимо всегда показывать только первый item,
    то его следует создать на основе TListBoxHeader, а не TListBoxItem.
    Если ваш список состоит из групп, название которой необходимо видеть при прокрутке,
    заголовок группы следует добавлять на основе TListBoxGroupHeader.

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

    Добавление TListBoxHeader/TListBoxGroupHeader через дизайнер:

    • Правый клик на ListBox1 -> AddItem->TListBoxHeader.

    Динамически:

    var
      lbiH: TListBoxGroupHeader;
    begin
      lbiH := TListBoxGroupHeader.Create( nil );
      lbiH.Text := 'Текст заголовка';
      ListBox1.AddObject( lbiH );
    end; 

    Заголовок групп будет задерживаться при прокрутке только если

    ListBox1.GroupingKind := TListGroupingKind.Plain
    
  12. Чуть подробнее:

     
    var
      cContacts: JCursor;
    begin
      cContacts:= SharedActivity.getContentResolver.query(
        TJContactsContract_Profile.JavaClass.CONTENT_URI, nil, nil, nil, nil );
      cContacts.moveToFirst;
      Result := JStringToString(
            cContacts.getString(
              cContacts.getColumnIndex(
                StringToJString( 'display_name' ) ) ) );
      cContacts.close;
    end;

     

     

  13. Доброе утро!

    Ваша реализация не сильно отличается от моей, но суть проблемы в ней упущена:

    Идея такова, что при раскрытии одного ListBoxItem'a остальные сворачиваются полностью, а не до исходного размера.

    И, соответственно, при сворачивании развернутого ListBoxItem'a все принимают исходную величину.

    Спасибо.

  14. Приветствую. Задача, при клике на ListBoxItem развернуть его на весь ListBox с анимацией.

    Решаю её через

      ListBoxItem.AnimateFloat( 'Height', ListBox.Height ) и 

      ListBoxItem.AnimateFloat( 'Height', 0 ) соответственно.

    procedure TForm1.ResizeListBoxItem(Sender: TObject);
    var
    i: Integer;
    lbi: TListBoxItem;
    Ind: Integer;
    begin
    lbi := ( ( Sender as TFMXObject ).TagObject as TListBoxItem );
    Ind := lbi.Index;
    if lbi.Height = 280 then
    begin
    for i := 0 to ListBox1.Items.Count - 1 do
    if i = Ind then
    ListBox1.ListItems[ i ].AnimateFloat( 'Height', ListBox1.Height )
    else
    ListBox1.ListItems[ i ].AnimateFloat( 'Height', 0);
    end
    else
    for i := 0 to ListBox1.Items.Count - 1 do
    ListBox1.ListItems[ i ].AnimateFloat( 'Height', 280 );

    end;

    post-457-0-99295900-1413750069_thumb.jpg

    В каждом LisBoxItem находится свой ListBox с элементами, который в последствии и разворачивается на весь экран.

    В следствии столкнулся со следующей проблемой:

    Если развернуть один ListBoxItem и выделить один элемент на дочернем ListBox, а после свернуть его обратно и развернуть следующий, то всплывает ошибка 

      EArgumentOutOfRangeException

    Конкретно на приложенном примере следует:

    1. Main(1) - развернуть
    2. Slave(1,4) - выделить
    3. Main(1) - свернуть
    4. Main(0) - развернуть

    Проблема, видно, в обращении к уже скрытым элементам ListBoxItem и решить её удалось сворачивая остальные ListBoxItem не до 0, а до 1 или даже 0.1 .

    Выход не нравится, прошу помощи в более элегантном решении

    Request.zip

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