Размер диалогового окна
Автор: Steve Schafer
Давайте начнем с Microsoft Windows User Interface Guidelines (Руководящие
Принципы Построения Интерфейса Пользователя Microsoft Windows) и допустим, что
мы создаем диалоговое окно, содержащее компонент TMemo, занимающий большую часть
площади формы и кнопки OK и Cancel, размещенные в ее нижней части.
Несколько примечаний из "Принципов":
- Диалоговые окна должны быть основаны на базовых диалоговых модулях, dialog
base units (DBU), которые создаются с учетом размера шрифта и разрешения экрана.
- Диалоговые окна должны быть созданы, по возможности, на основе одного из
нескольких стандартных размеров. Для нашего окна мы используем размер 212x188
DBU.
- Все элементы управления должны распологаться как минимум на расстоянии 7 DBU
от края окна.
- Все элементы управления должны иметь между друг другом зазор размером
минимум 4 DBU.
- Кнопки должны иметь высоту 14 DBU. (Про ширину кнопок "принципы" умалчивают;
в обычном случая я использую кнопки шириной 40 DBU.)
Вот необходимая
для создания формы и элементов управления информация, которую мы можем получить
во время выполнения приложения:
procedure TMyForm.FormCreate(Sender: TObject);
var
BaseUnit, Margin, Spacing, BtnW, BtnH: Integer;
begin
BaseUnit := Canvas.TextHeight('0'); { 1 BaseUnit = 8 DBU определениям }
Width := (212 * BaseUnit) div 8;
Height := (188 * BaseUnit) div 8;
Margin := (7 * BaseUnit) div 8 - GetSystemMetrics(SM_CXFIXEDFRAME);
Spacing := (4 * BaseUnit) div 8;
BtnW := (40 * BaseUnit) div 8;
BtnH := (14 * BaseUnit) div 8;
Memo1.SetBounds(Margin, Margin, ClientWidth - 2 * Margin, ClientHeight -
2 * Margin - Spacing - BtnH);
OkButton.SetBounds(ClientWidth - Margin - Spacing - 2 * BtnW, ClientHeight -
Margin - BtnH, BtnW, BtnH);
CancelButton.SetBounds(ClientWidth - Margin - BtnW, ClientHeight - Margin -
BtnH, BtnW, BtnH);
end;
|
Данный код позволяет создать диалоговое окно с правильными размерами и
пропорциями, независимо от разрешения экрана и шрифтов.
|