Hallo!
Bezugnehmend auf
http://www.delphipraxis.net/internal...umfontfamilies
und
http://www.delphipraxis.net/internal...umfontfamilies
Wie in den anderen Theman angesprochen möchte auch ich wissen, welche Schriftgrößen eine Schriftart unterstützt.
Es gibt 2 Listboxen, FlbArt (Schriftart) und FlbGrad (Schriftgröße), wobei FlbArt.Items.Assign(Screen.Fonts).
Sobald nun die Callback-Funktion EnumFontSizes aufgerufen wird, stürzt das Programm an der markierten Stelle ab mit der nichtssagenden Fehlermeldung
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt TMyFontDialog.exe ist eine
Exception der Klasse $C0000005 mit der Meldung '
access violation at 0x004c22fb: read of address 0xffffffff' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Da ich, da es sich um eine Callback-Funktion handelt, FlbGrad nicht als Parameter übergeben kann, weiss ich nicht, was ich nun tun soll...
Delphi-Quellcode:
procedure TMyFontDialog.lbArtClick(_Sender: TObject);
function EnumFontSizes(
var EnumLogFont: TEnumLogFont; PTextMetric: PNewTextMetric; FontType: Integer; Data: LPARAM): Integer;
export;
stdcall;
var s:
String;
i,v,v2: Integer;
begin
if (FontType
and TRUETYPE_FONTTYPE)<>0
then begin
FlbGrad.Items.Add('
8');
// <-- Hier Fehler
FlbGrad.Items.Add('
9');
FlbGrad.Items.Add('
10');
FlbGrad.Items.Add('
11');
FlbGrad.Items.Add('
12');
FlbGrad.Items.Add('
14');
FlbGrad.Items.Add('
16');
FlbGrad.Items.Add('
18');
FlbGrad.Items.Add('
20');
FlbGrad.Items.Add('
22');
FlbGrad.Items.Add('
24');
FlbGrad.Items.Add('
26');
FlbGrad.Items.Add('
28');
FlbGrad.Items.Add('
36');
FlbGrad.Items.Add('
48');
FlbGrad.Items.Add('
72');
Result := 0;
end
end;
end;
var
DC: HDC;
OC: TNotifyEvent;
Fontname:
String;
begin
if FlbArt.ItemIndex < 0
then exit;
DC := GetDC(0);
with FlbGrad
do begin
Items.BeginUpdate;
try
Items.Clear;
PixelsPerInch := GetDeviceCaps(
DC, LOGPIXELSY);
Fontname := FlbArt.Items[FlbArt.ItemIndex];
EnumFontFamilies(
DC, PChar(Fontname), @EnumFontSizes, Longint(Self));
OC := OnClick;
OnClick :=
nil;
ItemIndex := Items.IndexOf(Text);
OnClick := OC;
if Assigned(OnClick)
then
OnClick(Self);
finally
Items.EndUpdate;
ReleaseDC(0,
DC);
end;
end;
end;