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

NesDmitrijj

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

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

  • Посещение

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

  1. Ссылку, которую я Вам дал, решает именно этот вопрос и именно реализацией стилей. Создается стиль. Форма делается прозрачной, размещается на нее панель и задается ей соответственно стиль. И все - нужная форма готова.

    Вы правы. Буду иметь ввиду. Спасибо. Но это те же танцы с бубном, что и расстановка Image'й по краям.

  2. Посмотрите тут, вдруг Вам это подходит.

    К сожалению, там ответа не нашел. Мне приходится делать убирать границы формы, делать её прозрачной и накидывать Image'ы по краям формы с полупрозраными картинками. Но это приходится проделывать ля каждой формы, что утомительно. Вот я и решил, что этот вопрос можно решить на уровне стилей. Но к сожалению ничего не выходит. Похоже, что сначала ресуется черный Canvas, по верх которого рисуется стиль окна. И чем прозрачнее я делаю стиль окна, тем больше черный цвет проступает сквозь него. Способов отключения этого черного полотна так и не нашел(((

  3. Здравствуйте!

     

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

  4. Здравствуйте!

     

    Обнаружил проблему (баг) в компоненте StyleBook. Точнее проблемы две:

     

    Баг №1:

    StyleBook не уживается с переменной ReportMemoryLeaksOnShutdown. Я использую эту переменную для того, чтобы отображать сообщения об утечках памяти при закрытии программы. Так вот, если эту переменную установить в True, то при закрытии программы возникает "Access violation...". Проблема возникает в модуле FMX.Platform.Win (см. прик. файл №1)

     

    Для воспроизведения проблемы достаточно:

    1. Создать новый проект

    2. Закинуть на форму компонент StyleBook. Указать в свойстве FileName путь к файлу стиля (*.style)

    3. В проекте после Application.Initialize; вставить строку  ReportMemoryLeaksOnShutdown := True;

    4. Запустите выполнение программы и закройте её. Тут и возникнет  "Access violation...".

     

    Примечание: проблема возникает только если свойство FileName заполнено.

     

    Баг №2:

    В StуleBook обнаружена утечка памяти (см. прик. файл №2)

     

    Для воспроизведения проблемы достаточно:

    1. Создать новый проект

    2. Закинуть на форму компонент StyleBook. Указать в свойстве FileName путь к файлу стиля (*.style)

    3. Очистить свойство FileName

    4. В проекте после Application.Initialize; вставить строку  ReportMemoryLeaksOnShutdown := True;

    5. Запустите выполнение программы и закройте её. Тут и возникнет сообщение об утечке памяти.

     

    Примечание: проблема возникает если единожды указать путь к файлу стиля и сохраняется даже после очистки свойства FileName.

     

    P.S. Эти проблемы как-то исправляются? Если нет, то сообщите, плз, разработчикам о этих багах.

    post-344-0-40213100-1409591525_thumb.jpg

    post-344-0-46650400-1409591841.jpg

  5. AlexG, Ваше сообщение "Только-что попробовал именно Ваш код - он дает один и тот же результат по скорости, не зависимо от того - сколько раз нажимать..." побудило меня продолжить эксперимент. В итоге выяснилось, что разница во времени отрисовки компонентов наблюдается только если запустить программу в режиме отладки (по F9). Если запустить программу без отладки (через проводник или shift+ctrl+f9), то ситуация в коре меняется. Мало того, что первое создание компонентов быстрее чем раньше (в режиме отладки), так все последующие пересоздания еще быстрее чем в первый раз, и, соответственно разницы во времени практически нет, сколько не пересоздавай.

     

    Так что вопрос можно считать решенным.

    Ответ: подобное поведение наблюдается только в режиме отладки.

  6. Эксперементальным путем было выявлено, что проблема в скорости отрисовки компонентов. Если у ScrollBox1 свойство Visible установить в False, то создание и пересоздание компонентов происходит примерно за одно и тоже время (в первый раз 47мс против 868мс, в последующие 60-63 мс против 1200-1700мс). Но это, повторюсь, если родительский компонент (ScrollBox1) не виден. может кто знает как ускорить отрисовку?

  7. AlexG, это FMX-проект.

     

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

     

    >3. Для чего Вы используете BeginUpdate и, соответственно, EndUpdate?

    >Ведь в вашем случае они относятся к объекту Self, т.е. - к самой форме.

    Верно, к форме, конечно можно было и ScrollBox1.BeginUpdate, но форма сама вызываем BeginUpdate у ScrollBox1.

     

    >4. И самое главное. Простите за откровенность - как-то все очень "криво"... Все очень и очень НЕ "правильно" )

    Согласен! Повторюсь, пример образный. Для бастрого достяжения требуемого эффекта.

     

    Вы во много правы, может время не совсем точно засекается, но главное другое, что при одних и тех же условиях время, засеченное одним и тем же способом, разное. В первый раз компоненты создаются и отрисовываются гораздо быстрее, чем в последующие. Разница во времени может отличься в 10 раз. Мне кажется это как-то связано с выделением памяти. Возможно нужно отключить/включить какой-то маркер, не знаю. Проблема сохраняется, даже если уничтожить форму целеком.

  8. Здравствуйте!

     

    Имею некую структуру типа record

    type
      TMyRecord = record
        Rect:TRectangle;
        Text:TLabel;
      end;
    

    и переменную

     m:array of TMyRecord;
    

    По нажатию на одну кнопку выполняю код

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      t1,t2:TDateTime;
      L:TLabel;
      R:TRectangle;
    begin
      t1:=Now;
      SetLength(m,1000);
      BeginUpdate;
      for I := Low(m) to High(m) do
      begin
        R:=TRectangle.Create(ScrollBox1);
        R.Parent:=ScrollBox1;
        R.ClipChildren:=true;
    
        L:=TLabel.Create(R);
        L.Text:='Это строка №'+IntToStr(i);
        L.Parent:=R;
    
        m[i].Rect:=R;
        m[i].Text:=L;
    
        R:=nil;
        L:=nil;
      end;
      EndUpdate;
      Application.ProcessMessages;
      t2:=Now;
    
      ShowMessage('Начало в: '+DateTimeToStr(t1)+#13+
                  'Завершение в: '+DateTimeToStr(t2)+#13+
                  'Прошло:'+IntToStr(MilliSecondsBetween(t2,t1))+'мс');
    end;
    

    по нажатию на вторую кнопку - очищаю

    procedure TForm1.Button2Click(Sender: TObject);
    var
      i:integer;
    begin
      for I := Low(m) to High(m) do
      begin
        m[i].Rect.Free;
        m[i].Rect:=nil;
        m[i].Text:=nil;
      end;
      SetLength(m,0);
    end;
    

    Вопрос:

    При первом нажатии на первую кнопку процесс может занимать 400мс, при втором нажатии (после очистки) 1200мс и так по возрастающей. Почему повторное создание всегда дольше первого?

     

    P.S. Приведенный код создан специально для примера (по аналогии с реально используемым). В реально мною используемом коде первое создание 300мс а последующие могут достигать и 3000мс (что в 10 раз дольше). Может чтото нужно сделать дополнительно после очистки?

  9. Здравствуйте!

     

    Использую следующий код:

    VertScrollBox1.AniCalculations.Animation := True;
    VertScrollBox1.AniCalculations.AutoShowing := True;
    

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

    Вопрос: Как сделать так, чтобы скроллбар не исчезал, если мышь над ним?

  10. Такое ощущение, что это баг в FloatAnimation. Он не восстанавливает свойство Inverse в первоначальное состояние.

    Если кинуть на форму вторую кнопку и в OnClick прописать FloatAnimation1.Inverse:=false; и нажимать её после завершения анимации, то повторный запуск анимации проходит без глюков. Замечу что в XE5 такого глюка небыло.

  11. Здравствуйте!

     

    Как можно реализовать простой эффект плавного исчезновения текста (TLabel) с последующим его плавным появлением без глюков?

    Пример:

    1. Кидаю на форму Label
    2. Создаю FloatAnimation для свойства Opacity
    3. У FloatAnimation делаю StartValue = 1, StopValue = 0
    4. Кидаю на форму кнопку и в OnClick пишу: FloatAnimation1.Start;
      Результат: При нажатии кнопки текст плавно исчезает и по завершению анимации текста не видно.
    5. У FloatAnimation делаю AutoReverse = true;

    Результат: При нажатии кнопки текст плавно исчезает, а затем плавно появляется. По завершению анимации текст виден. Но при повторном нажатии всё начинает глючить.

     

    Вопрос: как исправить?

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