Размер диалогового окна
Давайте начнем с 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; |
Данный код позволяет создать диалоговое окно с правильными размерами и пропорциями, независимо от разрешения экрана и шрифтов.
- Steve Schafer [000976]