• 0
dammit

Анимация масштабирования

Вопросы

Друзья, столкнулся  с проблемой, описанной в посте 

Хочу предложить свое решение (может кому пригодится).

Чтобы центр масштабирования был именно в центре объекта (в моем случае это TImage), необходимо после масштабирования установить свойство Align = TAlignLayout.Center, причем до этого нужно установить его в TAlignLayout.None !

Примерно вот так:

  Image1.Scale.X:= 1.3;
  Image1.Scale.Y:= 1.3;
  Image1.Align:= TAlignLayout.None;
  Image1.Align:= TAlignLayout.Center;

В этом случае будет эффект увеличения объекта из центра. Если убрать строчку "Image1.Align:= TAlignLayout.None;" - увеличение будет из левого верхнего угла. На мой взгляд некорректное поведение платформы. Возможно в будущих релизах это поправят.

Embarcadero® Delphi 10.1 Berlin Update 2 Version 24.0.25048.9432  

Изменено пользователем dammit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 ответ на этот вопрос

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От Alisson R Oliveira
      привет всем
      У меня проблема в разработке алгоритма, который знает, что кто-то здесь может мне помочь. В сценарии и следующем, у меня есть изображение, которое отображает изображения, размещенные пользователями, так как фотографии могут быть нескольких разных размеров. Мне бы хотелось, чтобы высота проспекта (Image.Height) рассчитывалась в соответствии с размером экрана мобильного телефона (Android) или его ширина и изображение занимают высоту correda без размытия изображения, детали с использованием свойства Wrapmode: = fit; а не Wrapmode: = Растянуть
       
       
      благодарный
    • От S0lexV
      Доброго времени!
      Только начал знакомится с FMX, казалось бы от VCL отличий не так уж и много но все же....
      Пытаюсь загрузить картинку в ImageViewer (в Image тоже пробовал).
      ImageViewer1->Bitmap->LoadFromFile(System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "1.bmp")); Но получаю ошибку  (failed to loading bitmap "путь_к_папке_с_файлами_приложения"  )
      В deployment загружен файл "1.bmp", remote path прописан assets\internal
      Пробовал похожим способом загрузить с помощью deployment текстовый файл  в мемо все работает!
      Когда компилю под винду - картинка грузится, под андроид:  вылетает вышеуказанная ошибка
      PS Среда C++B10 Seattle
       
    • От TTTimon
      В проекте несколько форм: есть главная (меню) + ИСТОРИЯ (достаточно тяжелая форма) + другие
      Задача:
      по нажатию в МЕНЮ на кнопку, начинается создание ИСТОРИИ и в это время проигрывается FloatAnimation для вращения индикатора (это круг с изображением).
      нужно по завершению создания формы прекратить анимацию и показать форму
       
      Как делаю:
      на главной форме есть F: TForm; при создании формы: F := nil; при нажатии на кнопку: 1) стартует анимация 2) F := TF_History.Create(nil); в процессе проверяю создание формы (если создалась, то стоп) procedure TF_Main.FloatAnimation1Process(Sender: TObject);
      begin
        if Assigned(F) then FloatAnimation1.Stop;
      end;
      в стопе показываю форму procedure TF_Main.FloatAnimation1Finish(Sender: TObject);
      begin
        F.Show;
      end;
       
      Ошибка: приложение вылетает с ошибкой "stack overflow"!
      P.S. Не совсем понимаю где копать, да и если у кого есть решение получше, буду только рад!)
    • От delphiec
      Беда, совсем беда .... Имеется на форме TListView (listviewEdit.jpg), в него динамически загружается список с картинками полученными через idhttp + TmemoryStream.
       
      ..... private nowDrawed:string; ... Item: TListViewItem; ImageObject: TListItemImage; TextObject: TListItemText; groups:array of Tgroups; ... ..... procedure Tmain.drawGroups(); var i:integer; begin try loader.Show; loader.ProgressBar.Max:=high(groups); loader.ProgressBar.Value:=0; Application.ProcessMessages; nowDrawed:='groups'; ListView.Items.Clear; ListView.BeginUpdate; for i := 0 to high(groups) do begin Item := ListView.Items.Add; TextObject:=Item.Objects.FindObjectT<TListitemtext>('Text'); TextObject.Text:=groups[i].caption; Item.Tag:=strtoint(groups[i].id); ImageObject:=Item.Objects.FindObjectT<TListItemImage>('Image'); if ImageObject.Bitmap=nil then ImageObject.bitmap:=TBitmap.Create; http.loadImage(url+groups[i].image,ImageObject.bitmap); loader.ProgressBar.Value:=i; Application.ProcessMessages; end; ListView.EndUpdate; loader.hide; except loader.hide; end; end; procedure Thttp.loadImage(link:string;bitmap:Tbitmap); var MS: TMemoryStream; begin try MS := TMemoryStream.Create; IdHTTP.Get(link,MS); MS.Position:=0; if not (bitmap=nil) then bitmap.LoadFromStream(MS); MS.Free; except end; end; Так вот, если собирать под Win64 (onWin.jpg), то всё отлично, но если под андроид (onAndr.jpg), то картинки отсутствуют. 
      При этом, если на форму бросить TImage и передавать в функцию loadImage bitmap этого Timage, то всё отображается корректно.
      P.S. Тестовое изображение в аттаче.




    • От hryasch
      Добрый день. Существует одна проблема, с которой уже несколько недель не могу справиться. Есть старый код под WinAPI, его нужно переделать под Android через firemonkey. И главная проблема - есть код, который из собственного формата делает HBITMAP из WinAPI. Фактически это структура, где последнее поле - указатели на биты. Это переделать легко, создав собственную копию такой структуры. Но теперь мне нужно перевести ее в TBitmap, и я не очень понимаю как это сделать.
       
    • От GoldenEalge
      Имеется бд с полем blob , как из нее загрузить картинку в ListView через LiveBindings ?
    • От ODmitrijS
      Подскажите алгоритм или готовый пример заливки замкнутой области рисунка произвольной формы определенным цветом?
      Моё решение часто приводит к переполнению стека.
    • От Рагим
      Добрый день.
       
      Столкнулся с проблемой. Приложение изначально писал на XE6, потом перенес на XE7 - все работало без проблем. Обновился до XE8 и код перестал работать. Причем никаких ошибок не выкидывает. Просто зависает не отрабатывает процедура. Прошу не бить ногами за дилетантский код. Главное до этого нормально работал. Суть такая: есть два приложения под Андроид. Связаны между собой по сети. Назовем их сервер и клиент (вернее 4 клиента). Одно из них посылает сообщение на другой и при получении сообщения должна отрабатывать эта процедура. Взависимости от того кто и когда послал сообщение, появляются разные картинки. 
       
      procedure TForm1.ShowPlus(a,b:byte); //a - Номер строки //b - Цвет команды begin  but[a]:=b;  case a of   1: begin       case b of        1: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;   2: begin       case b of        1: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;   3: begin       case b of        1: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;   4: begin       case b of        1: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;  end; end;  
      Буду рад любой помощи в исправлении ошибок или оптимизации кода.
    • От yura371
      Например я создаю Blank Application, добавляю TabControl, туда TabItem и создаю кнопку в TabItem. Потом у кнопки меняю Align на "Scale" и кнопка исчезает.(может исчезнуть после компилирования или перезапуска проекта) и так с любым элементом. Видео-захват экрана можно посмотреть по ссылке https://youtu.be/r2p9JRXnBi0
    • От Axbor
      Есть компонента TImage, в нем рисунок футболки в png формате. При изменение ColorQuad я хочу покрасить эту футболку на тот цвет которое выбрано в ColorQuad.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу