Советы по Delphi

         

Большие/Маленькие шрифты?


Когда мои программы работают на системах с установленными маленькими шрифтами, я получаю странный вид моей формы. К примеру, расположенные на форме компоненты Label становятся малы для размещения указанного теста, обрезая его в правой или нижней части. StringGrid не осуществляет положенного выравнивания и т.д.

Попробуй следующий код. Он масштабирует как размер формы, так и размер шрифтов. Вызывай его в Form.FormCreate. Надеюсь это поможет.

unit geScale;

interface
uses
Forms, Controls;

procedure geAutoScale(MForm: TForm);

implementation
Type

TFooClass = class(TControl); { необходимо выяснить защищенность }
{ свойства Font }

procedure geAutoScale(MForm: TForm);
const
cScreenWidth :integer = 800;cScreenHeight:integer = 600;cPixelsPerInch:integer= 96;cFontHeight:integer = -11; {В режиме проектирование значение из Font.Height}
var
i: integer;
begin
{ВАЖНО!! : Установите в Инспекторе Объектов свойство Scaled TForm в FALSE.
Следующая программа масштабирует форму так, чтобы она выглядела одинакововнезависимости от размера экрана и пикселей на дюйм. Расположенный нижеучасток кода проверяет, отличается ли размер экрана во время выполненияот размера во время проектирования. Если да, Scaled устанавливается в Trueи компоненты снова масштабируются так, чтобы они выводились в той жепозиции экрана, что и во время проектирования.}if (Screen.width &;lt> cScreenWidth)or(Screen.PixelsPerInch <> cPixelsPerInch) thenbeginMForm.scaled := TRUE;MForm.height := MForm.height * screen.Height DIV cScreenHeight;MForm.width := MForm.width * screen.width DIV cScreenWidth;MForm.ScaleBy(screen.width, cScreenWidth);
end;
{Этот код проверяет, отличается ли размер шрифта во времы выполнения отразмера во время проектирования. Если во время выполнения pixelsperinchформы отличается от pixelsperinch во время проектирования, шрифты сновамасштабируются так, чтобы форма не отличалась от той, которая была вовремя разработки. Масштабирование производится исходя из коэффициента,получаемого путем деления значения font.height во время проектированияна font.height во время выполнения. Font.size в этом случае работать небудет, так как это может дать результат больший, чем текущие размерыкомпонентов, при этом текст может оказаться за границами области компонента.Например, форма создана при размерах экрана 800x600 с установленнымималенькими шрифтами, имеющими размер font.size = 8. Когда вы запускаетев системе с 800x600 и большими шрифтами, font.size также будет равен 8,но текст будет бОльшим чем при работе в системе с маленькими шрифтами.Данное масштабирование позволяет иметь один и тот же размер шрифтовпри различных установках системы.}
if (Screen.PixelsPerInch <> cPixelsPerInch) thenbegin
for
i := MForm.ControlCount - 1 downto 0 doTFooClass(MForm.Controls[i]).Font.Height :=(MForm.Font.Height div cFontHeight) *TFooClass(MForm.Controls[i]).Font.Height;
end;
end;

end.

[000282]



Содержание раздела