[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]
"Greg Peterson" <maxint@cwnet.com>
Try this:
--------------------------------------------------------------------------------
FUNCTION SmallFonts : BOOLEAN;
{returns TRUE if small fonts are set, FALSE if using Large Fonts }
VAR
DC : HDC; { used to check for number of colors available }
BEGIN
DC := GetDC(0);
Result := (GetDeviceCaps(DC, LOGPIXELSX) = 96);
{ LOGPIXELSX will = 120 if large fonts are in use }
ReleaseDC(0, DC);
END;
--------------------------------------------------------------------------------
Large/Small Fonts?
Gene Eighmy <eighmy@scott.net>
>
> When my programs run on systems with small fonts, I
> often get strange output. Labels too small to hold all
> the text, leaving the right, or the bottom, unshown, for
> instance. StringGrid's which don't align as expected.
>
Try this. This will rescale both the form size and also reform small vs. large fonts. Call it in Form.FormCreate. Hope this helps.
--------------------------------------------------------------------------------
unit geScale;
interface
uses Forms, Controls;
procedure geAutoScale(MForm: TForm);
implementation
Type
TFooClass = class(TControl); { needed to get at protected }
{ font property }
procedure geAutoScale(MForm: TForm);
const
cScreenWidth :integer = 800;
cScreenHeight:integer = 600;
cPixelsPerInch:integer= 96;
cFontHeight:integer = -11; {Design-time value of From.Font.Height}
var
i: integer;
begin
{
IMPORTANT!! : Set Scaled Property of TForm to FALSE with Object Inspector.
The following routine will scale the form such that it looks the same
regardless of the screen size or pixels per inch. The following section
determines if the screen width differs from the design-time screen size.
If it differs, Scaled is set true and component positions are rescaled such
that they appear in the same screen location as the design-time location.
}
if (Screen.width &;lt> cScreenWidth)or(Screen.PixelsPerInch <> cPixelsPerInch) then
begin
MForm.scaled := TRUE;
MForm.height := MForm.height * screen.Height DIV cScreenHeight;
MForm.width := MForm.width * screen.width DIV cScreenWidth;
MForm.ScaleBy(screen.width, cScreenWidth);
end;
{
This section determines if the run-time font size differs from the design-
time font size. If the run-time pixelsperinch differs form the design-time
pixelsperinch, the fonts must be rescaled in order for the form to appear
as designed. Scaling is calculated as the ratio of the design-time font.height
to run-time font.height. Font.size will not work as it may equal the design-
time value yet appear physically larger crowding and overrunning other
components. For instance, a form designed in 800x600 small fonts
has a font.size of 8. When you run the form on in 800x600 large fonts,
font.size is also 8 but the text is noticably larger than when run in small
font mode. This scaling will make them both appear to be the same size.
}
if (Screen.PixelsPerInch <> cPixelsPerInch) then
begin
for i := MForm.ControlCount - 1 downto 0 do
TFooClass(MForm.Controls[i]).Font.Height :=
(MForm.Font.Height div cFontHeight) *
TFooClass(MForm.Controls[i]).Font.Height;
end;
end;
end.
[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]