Skip to content

Latest commit

 

History

History
120 lines (89 loc) · 3.29 KB

File metadata and controls

120 lines (89 loc) · 3.29 KB

Home

Reading metrics for the currently selected font

Code:

DO decl

*|typedef struct tagTEXTMETRIC {
*|  LONG tmHeight;             0:4
*|  LONG tmAscent;             4:4
*|  LONG tmDescent;            8:4
*|  LONG tmInternalLeading;    12:4
*|  LONG tmExternalLeading;    16:4
*|  LONG tmAveCharWidth;       20:4
*|  LONG tmMaxCharWidth;       24:4
*|  LONG tmWeight;             28:4
*|  LONG tmOverhang;           32:4
*|  LONG tmDigitizedAspectX;   36:4
*|  LONG tmDigitizedAspectY;   40:4
*|  TCHAR tmFirstChar;         44:1
*|  TCHAR tmLastChar;          45:1
*|  TCHAR tmDefaultChar;       46:1
*|  TCHAR tmBreakChar;         47:1
*|  BYTE tmItalic;             48:1
*|  BYTE tmUnderlined;         49:1
*|  BYTE tmStruckOut;          50:1
*|  BYTE tmPitchAndFamily;     51:1
*|  BYTE tmCharSet;            52:1
*|} TEXTMETRIC, *PTEXTMETRIC;

	LOCAL lcBuffer, hWindow, hDC
	lcBuffer = Repli(Chr(0), 250)
	hWindow = GetActiveWindow()
	hDC = GetWindowDC(hWindow)
	
	= GetTextMetrics(hDC, @lcBuffer)
	
	= _add("Height (ascent + descent)",;
		b2d(SUBS(lcBuffer, 1,4)))

	= _add("Ascent (units above the base line)";
		 b2d(SUBS(lcBuffer, 5,4)))

	= _add("Descent (units below the base line)",;
		b2d(SUBS(lcBuffer, 9,4)))

	= _add("Leading inside the bounds...",;
		b2d(SUBS(lcBuffer, 13,4)))

	= _add("Extra leading added between rows",;
		b2d(SUBS(lcBuffer, 17,4)))

	= _add("Avg width of characters",;
		b2d(SUBS(lcBuffer, 21,4)))

	= _add("Width of the widest character",;
		b2d(SUBS(lcBuffer, 25,4)))

	= _add("Weight of the font",;
		b2d(SUBS(lcBuffer, 29,4)))

	= _add("Extra width per string", b2d(SUBS(lcBuffer, 33,4)))

	= _add("Optimal horiz aspect", b2d(SUBS(lcBuffer, 37,4)))

	= _add("Optimal vert aspect", b2d(SUBS(lcBuffer, 41,4)))
	
	= _add("First character defined", Asc(SUBS(lcBuffer, 45,1)))

	= _add("Last character defined", Asc(SUBS(lcBuffer, 46,1)))

	= _add("Substitute if char not found", Asc(SUBS(lcBuffer, 47,1)))

	= _add("Char for word breaks", Asc(SUBS(lcBuffer, 48,1)))
	
	= _add("Italic", Asc(SUBS(lcBuffer, 49,1)))
	= _add("Underlined", Asc(SUBS(lcBuffer, 50,1)))
	= _add("Strikeout", Asc(SUBS(lcBuffer, 51,1)))

	= _add("Font pitch", BitAnd(15,Asc(SUBS(lcBuffer, 52,1))))
	= _add("Font family", BitAnd(240,Asc(SUBS(lcBuffer, 52,1))))

	= _add("Font Character Set", Asc(SUBS(lcBuffer, 53,1)))

	ReleaseDC(hWindow, hDC)
	GO TOP
	BROW NORMAL NOWAIT
* end of main

PROCEDURE _add(lcName, lnValue)
	IF Not USED("csResult")
		CREATE CURSOR csResult (paramname C(35), paramvalue C(50))
	ENDIF
	INSERT INTO csResult VALUES (m.lcName, LTRIM(STR(m.lnValue)))

PROCEDURE decl
	DECLARE INTEGER GetActiveWindow IN user32
	DECLARE INTEGER GetWindowDC IN user32 INTEGER hwnd

	DECLARE INTEGER ReleaseDC IN user32 ;
		INTEGER hwnd,  INTEGER hdc

	DECLARE INTEGER GetTextMetrics IN gdi32;
		INTEGER hdc, STRING @lptm

FUNCTION  b2d(lcBuffer)
RETURN Asc(SUBS(lcBuffer, 1,1)) + ;
	BitLShift(Asc(SUBS(lcBuffer, 2,1)),  8) +;
	BitLShift(Asc(SUBS(lcBuffer, 3,1)), 16) +;
	BitLShift(Asc(SUBS(lcBuffer, 4,1)), 24)  

Listed functions:

GetActiveWindow
GetTextMetrics
GetWindowDC
ReleaseDC