Russian Belarusian English German Japanese Ukrainian

ScaleBy - масштабирование компонентов

CuBook15

Методе ScaleBy позволяет изменять размеры компонентов. Он определен как:
void __fastcall ScaleBy(int М, int D);
где M и D - множитель и делитель, определяющие изменение масштаба компонента. Масштабируются такие свойства компонента, как Width и Height, определяющие его размер. Свойства Тор и Left остаются, неизменными. Масштабируется также размер шрифта, если только в компоненте не установлено ParentFon = true. В последнем случае шрифт наследуется от родительского компонента и поэтому не изменяется.
 
Если компонент является контейнером, содержащим другие компоненты, то его дочерние компоненты также масштабируются. Причем у них изменяются не только Width и Height, но также пропорционально изменяются Тор и Left, определяющие их местоположение. Если во всех дочерних компонентах установлено ParentFont = true, а в компоненте-контейнере ParentFont = false, то пропорционально изменяются и шрифты всех компонентов (но, конечно, не непрерывно, а скачками, доступными тому или иному типу шрифта).
 
Параметры М и D определяют соответственно множитель и делитель масштаба. Например, чтобы уменьшить размеры на 10% от начального значения, можно задать М равным 9, a D равным 10 (9/10). Если же нужно увеличить размер на 1/3, то можно задать М = 133 и D = 100 (133/100) или М = 4 и D = 3 (4/3). Так, оператор:
Edit1->ScaleBy(11,10);
масштабирует окно редактирования Edit1. В любом случае при выполнении этого оператора длина окна (свойство Width) увеличивается на 10%, что обеспечивает возможность наблюдать и редактировать в нем более длинный текст. Высота окна (свойство Height) будет изменяться пропорционально, только если свойство компонента AutoSize равно false. В противном случае высота определяется только размером шрифта и при постоянном шрифте будет неизменной. А размер шрифта будет меняться, только если свойство компонента ParentFont равно false, т.к. иначе шрифт определяется родительским компонентом. Таким образом, при AutoSize = true и ParentFont = true изменяется только длина окна редактирования.
 
Оператор:
Panel1->ScaleBy(11,10);
увеличивает размер панели, а также координаты и размер всех ее компонентов. Если в панели ParentFont = false, то шрифты во всех компонентах также увеличиваются независимо от значений их свойства ParentFont. Причем они увеличиваются и в неоконных компонентах, например, в метках. Если же в панели ParentFont = true, то шрифты увеличиваются только в компонентах, в которых ParentFont = false.
 
Приведенный выше оператор изменяет масштаб сразу группы компонентов, но при этом сдвигает их позиции, поскольку действует на свойства Тор и Left. Можно избежать этого, обращаясь по отдельности к каждому дочернему оконному компоненту панели с помощью, например, такого оператора:
for(int i = 0; i < Panel1->ControlCount; i++)
{
if(Panel1->Controls[i]->InheritsFrom(__classid(TWinControl)))((TWinControl *)Panel1->Controls[i])->ScaleBy(11,10);
}
При этом надо иметь в виду, что непосредственно применять ScaleBy можно только к оконным компонентам, являющимся наследниками класса TWinControl. Поэтому в приведенном операторе сначала проверяется, является ли компонент наследником TWinControl. Для этого к компоненту применяется функция InheritsFrom, возвращающая true, если класс объекта наследует классу, передаваемому в функцию как параметр. В данном случае в качестве параметра в функцию передается класс TWinControl, который преобразуется в нужную форму с помощью ключевого слова __classid.
 
Если установлено, что компонент является оконным (его класс наследует TWinControl), то к нему применяется функция ScaleBy, для чего используется явное приведение его типа к TWinControl: (TWinControl *).
 
Приведенный код масштабирует только оконные компоненты. Неоконные компоненты, например метки, масштабироваться не будут.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий