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

krapotkin

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

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

  • Посещение

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

    209

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

  1. XE8 Upd1

    форма с мульти-вью

    наверху - TToolBar

    в шторке - комбо-бокс

    черное поле - панель, в которую загружаются фреймы в зависимости от выбора в комбо

    применен стиль*

    Dbzb2R0E.png

     

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

    Dbzb2R0H.png

     

    хуже то, что когда она вернулась, тулбар остался изгажен

    Dbzb2R0G.png

     

    я пробовал toolbar.Repaint, toolbar.RecalcSize, multiView.RecalcSize

    не помогло

    Как исправить?

     

    *если убрать стили, поведение не меняется

  2. На форме два TEdit

    KeyboardType у первого = NamePhonePad

    у второго = Alphabet

     

    при переходе фокуса клавиатура остается такой, какая была при входе в первый из Edit'ов

    как принудительно поменять тип клавиатуры?

  3. первый пост

    >>TFloatAnimation использует ProcessMessages 

    >>очень хочется иметь Repaint без ProcessMessages.

    второй пост

    >>я запускаю AnimateFloatWait  чтобы нельзя было ее убить до завершения, и ...опять получаю AV

    >>Разбираюсь - а она оказывается вовсю Processит Messages.

    >>искал к-нить аналог VCL Repaint.

     

    TForm.PaintRects

    а вот и ответ...

  4. Это базовая теория, и я в курсе её.

    Давайте вернемся к исходной задаче. У меня нет фоновых операций. Мне нужно, чтобы именно анимация, именно в главном потоке доработала без прерываний. Нельзя использовать ProcessMessages! Ибо она обрабатывает ВСЕ виды событий. Мне всего лишь нужно, чтобы происходила только перерисовка. И лишь по окончанию анимации главный поток обрабатывал бы очередь сообщений дальше.

    В VCL это достигается вызовом Repaint. В FMX - не работает.

  5. но визуально работа указанных аниматоров будет проявляться только когда в главном потоке происходит ProcessMessages и там - обработка WM_PAINT. Принудительной прорисовки не будет.

    Получается, если главный поток занят, то и анимация будет дерганая?

    Я прав?

  6. procedure TFmxObject.AnimateFloatWait(const APropertyName: string; const NewValue: Single; Duration: Single = 0.2;
      AType: TAnimationType = TAnimationType.atIn;
      AInterpolation: TInterpolationType = TInterpolationType.itLinear);
    var
      A: TFloatAnimation;
    begin
      StopPropertyAnimation(APropertyName);
      A := TFloatAnimation.Create(Self);
      try
        A.Parent := Self;
        A.AnimationType := AType;
        A.Interpolation := AInterpolation;
        A.Duration := Duration;
        A.PropertyName := APropertyName;
        A.StartFromCurrent := True;
        A.StopValue := NewValue;
        A.Start;
        while A.FRunning do
        begin
          Application.ProcessMessages;
          Sleep(0);
        end;
      finally
        A.DisposeOf;
      end;
    end;
    

    Мне нужно запустить анимацию формы: координаты, ширина, высота. Но окно  вспомогательное.

    По задумке, если щелкнуть на него, оно должно исчезнуть. (и уничтожиться)

    При неудачном стечении обстоятельств (форма удалилась во время анимации) получаем AV

    Поэтому я запускаю 3 анимации как AnimateFloat и 4-ю AnimateFloatWait  чтобы нельзя было ее убить до завершения, и ...опять получаю AV

    Разбираюсь - а она оказывается вовсю Processит Messages. В том числе и close...

    Пробовал заменить весь метод ..Wait, искал к-нить аналог VCL Repaint. Но он не срабатывает.

  7. TFloatAnimation использует ProcessMessages 

     

    Это чревато возникновением всяких событий, и даже закрытию формы во время анимации, что приводит к AV

    очень хочется иметь Repaint без ProcessMessages.

    Это возможно?

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