• 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
Mazzay, Евгений Корепов и Brovin Yaroslav понравилось это

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


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

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

  • 0

Спасибо. Пригодилось.

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: 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.
    • Автор: Dozent
      Добрый день!
       
      Проблема в том что создавал приложение  со статичным изображением человека. Заливал на планшет под виндой 8.0 всё было норм.
       
      Теперь переделываю чтобы эта статичная картинка задышала. Т.е. заливаю туда др картинку с дыркой в груди. На место грудной части кидаю картинку, в неё TBitmapListAnimation в него заливаю спрайт дыхания состоящий из 15 картинок в 3 строки.
       
      На компе запускаю всё прекрасно дышит!!!! Картинка изменяется. Заливаю на планшет! Прикол в том что картинка статична!!! Она не изменилась
       
      Дело даже не в том что анимация не работает, дело в том что картинка не изменилась! Почему я так решил? Потому что картинку дыхания подогнать идеально пока не получилось и там есть зазоры которые не реально не увидеть! Ну так вот этих зазоров на планшете нет!!!!
       
      Т.е. картинка не изменилась! Что может быть?! Пробовал Clean у проекта делать! Пересобирать Build, ехе удалять и тд не помогает)



    • Автор: Dozent
      Добрый день!
       
      Суть в проблемы в следующем.
      Создал стиль для TListBoxItem
       
      В RunTime создаю итемы по событию
      procedure TfrmMain.ReadActionDb(Sender: TObject; const sTime, sActionName: string; const RecordNumber, ActionID: integer); var iCurItem: integer; Item: TListBoxItem; begin Item := TListBoxItem.Create(nil); Item.Index := 0; // Item.Parent := lbLogActions; Item.Height := 60; Item.Margins.Top := 10; Item.StyleLookup := 'listboxitemaction'; Item.Tag := ActionID; Item.StylesData['timeaction'] := SecToTime(sTime); Item.StylesData['labelaction'] := sActionName; Item.StylesData['imageaction'] := '.\images\ScenarioImage\actions\' + IntToStr(ActionID) + '.png'; lbLogActions.InsertObject(0, Item); end; Проблема в том что, картинки подгружаются не всегда правильно, могу выскочить просто какие-то артефакты, а может вообще уменьшенная часть экрана не понятно почему)
      Можно видеть на картинке что 2 созданный итем не отобразил картинку
       
      Что не так делаю?


    • Автор: Dozent
      Добрый день! Помню на каком-то из последних семинаров показывали как можно быстро и удобно настроить чтобы текст обтекал картику, напомните плз

      Суть в том что хочу реализовать что бы текст обтекал картинку справа. Т.е. картинка слева вверху, а текст справа и снизу картинки. На одном из последних семинаров показывали как это очень удобно и быстро можно сделать! Забыл!
      Подскажите кто помнит, плз)
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу