Inno Setup правильно позиционирует метку относительно экрана DPI

Я пытаюсь поместить метку над разделом InfoAfterPage и сделать так, чтобы она всегда отображалась там, независимо от того, какое масштабирование используется, точно так же, как показано ниже.

Позиция метки

Я использую Label.Top := WizardForm.InfoAfterPage.Height - 20, но знаю, что это может выглядеть неуместно, если экран каким-либо образом масштабируется. Каков наилучший способ установить это так, чтобы оно всегда оставалось в этом положении независимо от того, как масштабируется экран?


person Robert Wigley    schedule 22.05.2015    source источник


Ответы (1)


Используйте ScaleY вспомогательную функцию:

Label.Top := WizardForm.InfoAfterPage.Height - ScaleY(20);

Или даже лучше, даже не делайте предположений о высоте метки:

Label.Top := WizardForm.InfoAfterPage.Height - ScaleY(7) - Label.Height;

Или для вашего конкретного случая просто повторно используйте позицию ComponentsDiskSpaceLabel:

Label.Top := WizardForm.ComponentsDiskSpaceLabel.Top;

Обратите внимание, что ComponentsDiskSpaceLabel существует в течение всего срока службы мастера, поэтому вы можете получить к нему доступ в любое время.

person Martin Prikryl    schedule 22.05.2015
comment
Я использовал метод Label.Top := WizardForm.InfoAfterPage.Height - ScaleY(7) - Label.Height;, так как он находится на пользовательской странице, а ComponentsDiskSpaceLabel на этой странице не будет. Скриншот был просто для того, чтобы показать, как я хотел его расположить. Большое спасибо. - person Robert Wigley; 22.05.2015
comment
ComponentsDiskSpaceLabel существует на время жизни мастера, так что это не имеет значения. - person Martin Prikryl; 22.05.2015