Давайте начнем с Microsoft Windows User Interface Guidelines (Руководящие Принципы Построения Интерфейса Пользователя Microsoft Windows) и допустим, что мы создаем диалоговое окно, содержащее компонент TMemo, занимающий большую часть площади формы и кнопки OK и Cancel, размещенные в ее нижней части.
Несколько примечаний из "Принципов":
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]