AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mögliche Größen für eine Font ermitteln

Ein Thema von berens · begonnen am 9. Okt 2006 · letzter Beitrag vom 9. Okt 2006
 
berens

Registriert seit: 3. Sep 2004
441 Beiträge
 
Delphi 10.4 Sydney
 
#1

Mögliche Größen für eine Font ermitteln

  Alt 9. Okt 2006, 16:24
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;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz