Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2023, 13:32   #1
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
Вопрос Масштабирование TImage на Android жестами

Всем привет. Помогите, пожалуйста, организовать обычный зум в Timage.
Юзаю Delphi 11, Android 11
Пробовал такой пример:

Код:
procedure TForm1.Image1Gesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
  LObj: IControl;
  LImage: TImage;
  LImageCenter: TPointF;
  FLastDistance: integer;
begin


if EventInfo.GestureID = igiZoom then
  begin
    LObj := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
    if LObj is TImage then
    begin
      if (not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags)) and
        (not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags)) then
      begin

        LImage := TImage(LObj.GetObject);
        LImageCenter := LImage.Position.Point + PointF(LImage.Width / 2, LImage.Height / 2);
        LImage.Width := Max(LImage.Width + (EventInfo.Distance - FLastDistance), 10);
        LImage.Height := Max(LImage.Height + (EventInfo.Distance - FLastDistance), 10);
        LImage.Position.X := LImageCenter.X - LImage.Width / 2;
        LImage.Position.Y := LImageCenter.Y - LImage.Height / 2;
      end;
      FLastDistance := EventInfo.Distance;
    end;
  end;
end;
Вообще не реагирует на жест.

Пробовал такой пример:
Код:
var
  LObj: IControl;
  image: TImage;
begin
  LObj := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
  if LObj is TImage then
  begin
    if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) then
    begin
      image := TImage(LObj.GetObject);
      image.Width := image.Width + (EventInfo.Distance - FLastDIstance)/2;
      image.Height := image.Height + (EventInfo.Distance - FLastDIstance)/2;
      image.Position.X := image.Position.X - (EventInfo.Distance - FLastDIstance)/2;
      image.Position.Y := image.Position.Y - (EventInfo.Distance - FLastDIstance)/2;
    end;
  end;
  FLastDIstance := EventInfo.Distance;
end;
Реагирует, но картинка не увеличивается, а просто скачет по экрану.

В объекте TImage прописал нужный GestureManager.
Что я не так делаю? Спасибо заранее.

Последний раз редактировалось DimoK123; 19.02.2023 в 13:44.
DimoK123 вне форума Ответить с цитированием
Старый 20.02.2023, 11:13   #2
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
По умолчанию

Ну моя ошибка была в том, что я не поместил TImage в какой-нибудь TImageViewer или ScrollBox.
Код рабочий, только вот не знаю, как сделать чтобы минимальный размер изображения был оригинальным, и при зуме не уменьшался.
Буду признателен, если кто-то знает как это сделать.
Спасибо

Последний раз редактировалось DimoK123; 20.02.2023 в 11:28.
DimoK123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Android Studio - "Could not initialize class com.android.repository.api.RepoMana ger" senglory Java Мобильная разработка (Android) 0 12.08.2019 14:11
Android Studio не находит функцию TextView в пакете Android.Widget Astradam Java Мобильная разработка (Android) 0 21.12.2018 12:21
Как управлять android:digits компонента EditText из java код в Android Studio SASFM Мобильные ОС (Android, iOS, Windows Phone) 1 02.09.2018 02:02
Android. Как в XE5 сделать мульти-экранное приложение? (масштабирование) alextrof94 Общие вопросы Delphi 2 03.11.2013 05:24
масштабирование lenivec Общие вопросы Delphi 1 23.02.2008 07:07