Merkwürdig das Ganze ... ich kann auf einmal nicht mehr die Schriftgröße meiner eigenen Konsolenanwendung per
API ändern. Die Anwendung selbst ist eine 32bit-Anwendung, das Windows ist ein 64bit-System - dennoch sollte dies möglich sein.
Ich habe mir folgende Dinge definiert (
Quelle == MSDN):
Delphi-Quellcode:
COORD = record
X, Y: smallint;
end;
TCONSOLE_FONT_INFOEX = record
cbSize : cardinal;
nFont : longword;
dwFontSize : coord;
FontFamily : cardinal;
FontWeight : cardinal;
FaceName : array[0..LF_FACESIZE-1] of WideChar;
end;
PCONSOLE_FONT_INFOEX = ^TCONSOLE_FONT_INFOEX;
function SetCurrentConsoleFontEx( ConsoleOutput : THandle; MaximumWindow : BOOL; ConsoleInfo: PCONSOLE_FONT_INFOEX ) : BOOL; external kernel32 name 'SetCurrentConsoleFontEx';
function GetCurrentConsoleFontEx( ConsoleOutput : THandle; MaximumWindow : BOOL; ConsoleInfo: PCONSOLE_FONT_INFOEX ) : BOOL; external kernel32 name 'GetCurrentConsoleFontEx';
Und nun versuche ich Folgendes:
Delphi-Quellcode:
procedure SetConsoleFont( const AFontSize : word );
var ci : TCONSOLE_FONT_INFOEX;
ch : THandle;
begin
if NOT CheckWin32Version( 6, 0 ) then
EXIT;
FillChar( ci, SizeOf(TCONSOLE_FONT_INFOEX), 0 );
ci.cbSize:= SizeOf(TCONSOLE_FONT_INFOEX);
ch:= GetStdHandle( STD_OUTPUT_HANDLE );
if GetCurrentConsoleFontEx( ch, FALSE, @ci ) then
begin
ci.FontFamily:= FF_DONTCARE;
//ci.FaceName:= 'Lucida Console';
ci.FaceName:= 'Consolas';
ci.dwFontSize.X:= 0;
ci.dwFontSize.Y:= AFontSize;
ci.FontWeight:= FW_BOLD;
SetCurrentConsoleFontEx( ch, FALSE, @ci );
end
else
WriteLn( SysErrorMessage(GetLastError) );
end;
Mein Aufruf lautet dann
SetConsoleFont( 32 );
. In der Zeile, in der "GetCurrentConsoleFontEx" aufgerufen wird, knallt es mit einer Schutzverletzung. Jemand 'ne Idee, was das sein könnte?
Daniel R. Wolf
mit Grüßen aus Hamburg