1
0
mirror of synced 2024-12-22 09:13:07 +01:00

Added: X2UtGraphics unit

This commit is contained in:
Mark van Renswoude 2004-11-14 15:01:40 +00:00
parent 9f2bf5aa94
commit ab7d4298e3

140
X2UtGraphics.pas Normal file
View File

@ -0,0 +1,140 @@
{
:: X2UtGraphics contains various graphics-related functions.
::
:: Last changed: $Date$
:: Revision: $Rev$
:: Author: $Author$
}
unit X2UtGraphics;
interface
uses
Classes,
Controls,
Graphics;
{
:$ Applies anti-aliasing to a font.
:: Sets the font quality to it's maximum value, causing Windows 2000 and
:: above to draw the font anti-aliased.
}
procedure AAFont(const AFont: TFont);
{
:$ Applies anti-aliasing to a control's font.
:: Sets the font quality to it's maximum value, causing Windows 2000 and
:: above to draw the font anti-aliased.
}
procedure AAControl(const AControl: TControl);
{
:$ Applies anti-aliasing to all child controls.
:: Sets the font quality to it's maximum value, causing Windows 2000 and
:: above to draw the font anti-aliased. If ARecursive is set to True,
:: all children's children will be processed as well.
}
procedure AAChildren(const AParent: TWinControl;
const ARecursive: Boolean = False);
{
:$ Applies anti-aliasing to all owned controls.
:: Sets the font quality to it's maximum value, causing Windows 2000 and
:: above to draw the font anti-aliased.
}
procedure AAOwned(const AOwner: TComponent);
implementation
uses
SysUtils,
Windows;
type
{ Explanation of sneaky hack:
Normally, protected members are available only in either the unit in which
the class is declared, or any descendants. Using this fact, we create a
descendant of the class and use the descendant in the same class, thus
we are able to access the protected properties...
}
THackControl = class(TControl);
procedure AAFont;
var
pFont: TLogFont;
hAAFont: HFONT;
begin
// Use AFont as a starting point...
with pFont do begin
lfHeight := AFont.Height;
lfWidth := 0;
lfEscapement := 0;
lfOrientation := 0;
if fsBold in AFont.Style then
lfWeight := FW_BOLD
else
lfWeight := 0;
// These are actually booleans, but implemented as bytes for some reason
lfItalic := Byte(fsItalic in AFont.Style);
lfUnderline := Byte(fsUnderline in AFont.Style);
lfStrikeOut := 0;
lfCharSet := DEFAULT_CHARSET;
lfOutPrecision := OUT_DEFAULT_PRECIS;
lfClipPrecision := CLIP_DEFAULT_PRECIS;
// This is what causes the anti-aliasing
lfQuality := ANTIALIASED_QUALITY;
lfPitchAndFamily := DEFAULT_PITCH;
StrPCopy(lfFaceName, AFont.Name);
end;
// Create the font
hAAFont := CreateFontIndirect(pFont);
// Assign it to the control
AFont.Handle := hAAFont;
end;
procedure AAControl;
var
pControl: THackControl;
begin
pControl := THackControl(AControl);
AAFont(pControl.Font);
end;
procedure AAChildren;
var
iControl: Integer;
begin
for iControl := 0 to AParent.ControlCount - 1 do
begin
AAControl(AParent.Controls[iControl]);
if ARecursive and (AParent.Controls[iControl] is TWinControl) then
AAChildren(TWinControl(AParent.Controls[iControl]), True);
end;
end;
procedure AAOwned;
var
iControl: Integer;
begin
for iControl := 0 to AOwner.ComponentCount - 1 do
if AOwner.Components[iControl] is TControl then
AAControl(TControl(AOwner.Components[iControl]));
end;
end.