Как я могу выровнять / изменить размер 5 прямоугольников при максимальном увеличении в Firemonkey?
Итак, дело в том . У меня обычная (не развернутая — нестандартного размера) форма с 5 столбцами и 2 строками плиток (TRectangle) на ней (рис. 1). Мой вопрос в том, как я могу использовать якоря, слои или что-то еще, чтобы правильно выровнять / изменить размер плиток при максимальном увеличении (рис. 3). Это означает, что если по моей логике я установил для всех свойств Align (L / T / R / B) значение True, плитки должны просто стать немного больше и сохранить те же поля между ними (рис. 3), но на самом деле нет, они просто перекрывают друг друга при максимальном увеличении, как на фиг. 2. Мой вопрос в том, как я могу установить плитки так, чтобы они были немного больше и оставались те же поля между ними, как при нормальной форме (мой нестандартный размер), когда окно развернуто — в основном, чтобы они хорошо заполняли форму, а не перекрытие. Спасибо! PS: Извините за мой хромой рисунок краской 🙂
2 ответа
После некоторого размышления я подумал, что должно быть решение, которое сделает именно то, о чем вы просили. Таким образом, в дополнение к свойству Align=Scale решение включает использование свойства Margin для всех внешних сторон и одного из двух смежных компонентов для внутренних сторон.
Если мы рассмотрим прямоугольники в следующей форме, пронумерованные слева направо и сверху вниз, для полей будет установлено значение 5,0, как показано ниже:
Результат можно увидеть в форме исходного размера и в форме, измененной на два по горизонтали и вертикали. Расстояния до границ формы и между прямоугольниками остаются постоянными, и это справедливо также для полностью развернутой формы.


Это задание для TGridPanelLayout . Они немного неудобны в использовании, но могут проявить себя в ситуациях изменения размера.
- Создайте TGridPanelLayout и установите для него Align = Client.
- Добавьте недостающие столбцы . Когда вы впервые создаете его, макет состоит из 2 строк и 2 столбцов. Вы можете получить больше, добавляя элементы в ColumnCollection макета.
- Установите для свойств всех столбцов значение SizeStyle = Percent и Value = 20.
- Добавьте в макет 10 TRectangle и установите для них Align = Client
- Задайте для макета свойства Padding и Margin , чтобы получить желаемые промежутки между прямоугольниками и вокруг них.
Все это не требует масштабирования, поэтому поля не изменятся при изменении размера. Он просто перераспределяет лишнее пространство внутри прямоугольников.
Примечание по пункту 3. Установка свойства Value для нескольких столбцов или строк, когда SizeStyle — Percent . может быть затруднительно в среде IDE. Вы должны делать это много раз . каждый раз, когда значение приближается к тому, что вы просили. Что касается Берлина, это не исправлено (у меня нет Токио). Если вы не хотите этого делать, вы можете напрямую отредактировать dfm и просто записать значение;)
Как в firemonkey масштабировать прямоугольник
Масштабирование элементов формы в зависимости от разрешения экрана
Сделать ширину формы больше текущего разрешения экрана по горизонтали
Вопрос касается компилятора, имеется форма, нужно раздвинуть ее шире, чем текущее разрешение моего.
Масштабирование размеров формы, контролов и шрифтов в зависимости от разрешения экрана
Есть некоторая форма приложения размером 1280 х 1024. Подскажите пожалуйста алгоритм, наподобие.
Масштабирование блоков в зависимости от разрешения экрана
Всем привет! Я даже не знаю в каком конкретно разделе создавать эту тему: Делаю сайт для нашей.
Масштабирование картинки в зависимости от разрешения экрана
Программа будет запускаться на разных компьютерах с разными разрешениями, в инициализации стоит.
Как я могу выровнять / изменить размер 5 прямоугольников при максимальном увеличении в Firemonkey?

Итак, дело в том . У меня обычная (не развернутая — нестандартного размера) форма с 5 столбцами и 2 строками плиток (TRectangle) на ней (рис. 1). Мой вопрос в том, как я могу использовать якоря, слои или что-то еще, чтобы правильно выровнять / изменить размер плиток при максимальном увеличении (рис. 3). Это означает, что если по моей логике я установил для всех свойств Align (L / T / R / B) значение True, плитки должны просто стать немного больше и сохранить те же поля между ними (рис. 3), но на самом деле нет, они просто перекрывают друг друга при максимальном увеличении, как на фиг. 2. Мой вопрос заключается в том, как я могу установить плитки так, чтобы они были немного больше и оставались те же поля между ними, как если бы форма была нормальной (мой нестандартный размер), когда окно развернуто — в основном, чтобы они хорошо заполняли форму, а не перекрытие. Спасибо! PS: Извините за мой хромой рисунок краской
Не совсем то, что вы просили (расстояние между прямоугольниками изменится пропорционально), это выбрать все прямоугольники, сбросить все настройки, которые вы могли сделать, и установить только Align = Scale . Это также установит Anchors = [akLeft,akTop,akRight,akBottom]
Спасибо, мужик, за исключением верхнего поля / положения (которое меняется), размер теперь соответственно масштабируется, а расстояние между прямоугольниками остается прежним. Пока что использую ваше решение. Было бы неплохо исправить верхнее поле / позицию, но я могу работать с этим: D
Как я могу выровнять / изменить размер 5 прямоугольников при максимальном увеличении в Firemonkey?
Итак, дело в том . У меня обычная (не развернутая — нестандартного размера) форма с 5 столбцами и 2 строками плиток (TRectangle) на ней (рис. 1). Мой вопрос в том, как я могу использовать якоря, слои или что-то еще, чтобы правильно выровнять / изменить размер плиток при максимальном увеличении (рис. 3). Это означает, что если по моей логике я установил для всех свойств Align (L / T / R / B) значение True, плитки должны просто стать немного больше и сохранить те же поля между ними (рис. 3), но на самом деле нет, они просто перекрывают друг друга при максимальном увеличении, как на фиг. 2. Мой вопрос в том, как я могу установить плитки так, чтобы они были немного больше и оставались те же поля между ними, как при нормальной форме (мой нестандартный размер), когда окно развернуто — в основном, чтобы они хорошо заполняли форму, а не перекрытие. Спасибо! PS: Извините за мой хромой рисунок краской
2 ответа
После некоторого размышления я подумал, что должно быть решение, которое сделает именно то, о чем вы просили. Таким образом, в дополнение к свойству Align=Scale решение включает использование свойства Margin для всех внешних сторон и одного из двух смежных компонентов для внутренних сторон.
Если мы рассмотрим прямоугольники в следующей форме, пронумерованные слева направо и сверху вниз, для полей будет установлено значение 5,0, как показано ниже:
Результат можно увидеть в форме исходного размера и в форме, измененной на два по горизонтали и вертикали. Расстояния до границ формы и между прямоугольниками остаются постоянными, и это справедливо также для полностью развернутой формы.


Это задание для TGridPanelLayout . Они немного неудобны в использовании, но могут проявить себя в ситуациях изменения размера.
- Создайте TGridPanelLayout и установите для него Align = Client.
- Добавьте недостающие столбцы . Когда вы впервые создаете его, макет состоит из 2 строк и 2 столбцов. Вы можете получить больше, добавляя элементы в ColumnCollection макета.
- Установите для свойств всех столбцов значение SizeStyle = Percent и Value = 20.
- Добавьте в макет 10 TRectangle и установите для них Align = Client
- Задайте для макета свойства Padding и Margin , чтобы получить желаемые промежутки между прямоугольниками и вокруг них.
Все это не требует масштабирования, поэтому поля не изменятся при изменении размера. Он просто перераспределяет лишнее пространство внутри прямоугольников.
Примечание по пункту 3. Установка свойства Value для нескольких столбцов или строк, когда SizeStyle — Percent . может быть затруднительно в среде IDE. Вы должны делать это много раз . каждый раз, когда значение приближается к тому, что вы просили. Что касается Берлина, это не исправлено (у меня нет Токио). Если вы не хотите этого делать, вы можете напрямую отредактировать dfm и просто записать значение;)
Как вы рисуете изображение в повернутом прямоугольнике в FireMonkey?
В FireMonkey просто рисовать растровое изображение в исходном прямоугольнике:
И я делаю это на холсте TPaintBox . Вместо этого я хотел бы нарисовать растровое изображение, повернутое (и масштабированное, так как размер адресата может быть не таким же, как размер источника.)
- У меня есть две точки.
- Изображение должно располагаться ниже центральной точки между этими двумя точками.
- Изображение должно вращаться, чтобы следовать за углом между двумя точками
как на этом изображении:

Один из левых – это то, что я могу сейчас делать; справа – это то, что я хотел бы сделать.
Какой лучший способ сделать это?
Что я пробовал
Чтобы сохранить существующий код простым (например, рисованием в прямоугольник назначения, тем самым масштабируя результат), я пытался добавить матрицу поворота к матрице холста, прежде чем вызывать существующий код DrawBitmap. Например,
и несколько вариаций, умножающихся на существующую матрицу, создавая совершенно новую матрицу с переводом и вращением и т.д. Все это частично работает: угол поворота правильный, но у меня много проблем с получением позиции чтобы оставаться последовательным – например, вращаться вокруг центральной точки (и это даже не позволяет вращать верхнюю часть растрового изображения вокруг точки, а не вращаться вокруг центра.) Я обнаружил, что повернутое изображение смещено отлично в нижнем правом квадранте, но в остальных трех смещено/переведено неправильно, например, слишком далеко влево или подрезано к самому левому или верхнему положению X или Y двух точек. Я не знаю, почему это так, и в этот момент я спрашиваю о помощи.
Подробнее
- Delphi 10 Seattle
- FireMonkey (в Windows)
- Цель – это холст TPaintBox , произвольно помещенный. Коробка для рисования может сама быть на TScaledLayout .
- Цель состоит в том, чтобы нарисовать растровое изображение в поворотном целевом прямоугольнике в paintbox.
Насколько я понимаю, основная проблема заключается в том, чтобы найти координаты угла изображения в новой повернутой системе координат. Это можно решить следующим образом:
Есть ifdef -это картины линий и точек, которые могут вам помочь, – они рисуют линию и некоторые полезные точки (линейный центр и верхний левый угол изображения), которые полезны для отладки.
Редактировать DavidM: Кроме того, существуют также матрицы перевода и масштабирования. Лайтбокс опирается на холст родительской формы (в конечном счете), но может не располагаться на (0, 0), поэтому необходимо учитывать позицию смещения холста назначения. Кроме того, элемент управления может иметь масштабирование, поэтому его также необходимо встроить в конечную повернутую матрицу.
Этот код сильно отредактирован и работает независимо от ориентации /квадранта, который находится в. То есть, он должен работать, когда линия полностью горизонтальная или вертикальная, а также в квадрантах, кроме нижнего правого.
Одна интересная настройка – это распознавание того, что битмап в примере содержит текст. Когда линия находится в верхнем левом или верхнем правом квадрантах, то есть, поднимаясь вверх, а затем либо влево, либо вправо от ее начала, растровое изображение отображается вверх дном для человеческого глаза. Твист распознает это и поворачивает растровое изображение так, что “верхняя часть” растрового изображения всегда обращена к линии, а “нижняя” растрового изображения, как правило, указывает вниз, заставляя изображение выглядеть правильно. Вы можете удалить эту настройку, если вам не требуется изображение, которое представляет собой нечто узнаваемое (например, символ, текст, ярлык и т.д.).
Как в firemonkey масштабировать прямоугольник
Итак, дело в том . У меня обычная (не развернутая — нестандартного размера) форма с 5 столбцами и 2 строками плиток (TRectangle) на ней (рис. 1). Мой вопрос в том, как я могу использовать якоря, слои или что-то еще, чтобы правильно выровнять / изменить размер плиток при максимальном увеличении (рис. 3). Это означает, что если по моей логике я установил для всех свойств Align (L / T / R / B) значение True, плитки должны просто стать немного больше и сохранить те же поля между ними (рис. 3), но на самом деле нет, они просто перекрывают друг друга при максимальном увеличении, как на фиг. 2. Мой вопрос заключается в том, как я могу установить плитки так, чтобы они были немного больше и оставались те же поля между ними, как если бы форма была нормальной (мой нестандартный размер), когда окно развернуто — в основном, чтобы они хорошо заполняли форму, а не перекрытие. Спасибо! PS: Извините за мой хромой рисунок краской 🙂 
Как я могу выравнивать/изменять размер 5 прямоугольников при максимизации в Firemonkey?
Итак, здесь сделка. У меня есть обычная форма (не максимизированный — нестандартный размер) и 5 столбцов и 2 ряда плиток (TRectangle) на ней (фиг.1). Мой вопрос в том, как я могу использовать якоря или слои или что-нибудь, чтобы правильно выровнять/изменить размер плиток при максимизации (фиг.3). Значение, если по моей логике я установил для всех свойств Align (L/T/R/B) значение True, плитки должны просто немного увеличиться и сохранить одинаковые поля между ними (фиг.3), но на самом деле это не так, они просто перекрываются друг с другом при максимизации, как на фиг. 2. Мой вопрос заключается в том, как я могу установить плитки, чтобы они были немного больше и сохраняли одинаковые поля между ними, например, когда форма была нормальной (мой размер нестандартно), когда окно максимизировано — в основном они заполняют форму красиво, а не перекрытия. Спасибо! PS: Извините за мой хромой рисунок рисования 🙂 
FireMonkey рисует размытые линии
Я пытаюсь отобразить тонкие линии 1px в приложении для Android, но структура FMX ведет себя странно: линии часто рисуются немного размытыми, что можно увидеть на экране. Даже на экранах с высоким разрешением (тестируется на Ascend Mate 7, который имеет FullHD 1080×1920 на 16-дюймовом дисплее), это заметно. Не имеет значения, использую ли я компонент, например TLine или TRectangle (без сторон — только Height = 1), или если я рисую линию на холсте (например, с Canvas.Stroke.Thickness := 1.0 и Canvas.DrawLine() ). Компиляция в качестве приложения Windows показывает строки 1px правильно, но на Android строки рисуются как 2px или иногда как 3px. Иногда что-то между ним, как одна сплошная линия и вторая половина прозрачной линии.
Странно, что при использовании прокрутки представления (во время выполнения), которое содержит линии, меняется толщина линии. Установка толщины ниже значения 1.0 позволяет рисовать линии действительно как 1px, но тогда сами линии становятся прозрачными. Независимо от того, что я пытаюсь, я не могу создать сплошную тонкую полностью непрозрачную черную линию 1px. И вышеупомянутые проблемы (например, при прокрутке) все еще сохраняются. Изменение TForm.Quality тоже не помогает. У Native приложений для Android, похоже, нет проблем с рисованием тонких линий.
Вот скриншоты (масштабирование для измерения толщины линии):
Я попробовал некоторые предложения, например, «перемещение» строк: http://sourceoddity.com/blog/2013/10/using-tcanvas-in-delphi-for-android/. Это немного помогает устранить размытие, но линии все еще нарисованы с более чем 1px, и я хотел бы решить проблему в одном месте (я не могу переписать/перерисовать все сотни компонентов в рамках).
Я тестировал это с версией 10.1 (Берлин), но это странное поведение произошло и в предыдущих версиях (пока я помню).