Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schriftart mit Schriftschnitt speichern (https://www.delphipraxis.net/207422-schriftart-mit-schriftschnitt-speichern.html)

oldman62 22. Mär 2021 20:11

Schriftart mit Schriftschnitt speichern
 
Ein herzliches Hallo an alle im Forum.
Ich möchte in meiner Anwendung die verwendete Schriftart mit dem dazu ausgewählten Schriftschnitt speichern was ja als solches auch keine allzu größe Hürde ist. Ist aber eine Schriftart mit einem besonderen Schriftschnitt wie "Halb Fett" oder "Fein Schräg" ausgewählt, komme ich nicht weiter da TFontStyles diese nicht kennt. Gibt es eine Möglichkeit diese besondere Auswahl des Schriftschnittes doch zu erkennen um diese so zu speichern? Danke Euch.

KodeZwerg 22. Mär 2021 21:03

AW: Schriftart mit Schriftschnitt speichern
 
Willkommen im Forum!

Delphi-Quellcode:
uses
  Inifiles;

procedure SaveFont(FName: string; Section: string; smFont: TFont);
var
  FStream: TIniFile;
begin
  FStream := TIniFile.Create(FName);
  try
    FStream.WriteString(Section, 'Name', smFont.Name);
    FStream.WriteInteger(Section, 'CharSet', smFont.CharSet);
    FStream.WriteInteger(Section, 'Color', smFont.Color);
    FStream.WriteInteger(Section, 'Size', smFont.Size);
    FStream.WriteInteger(Section, 'Style', Byte(smFont.Style));
  finally
    FStream.Free;
  end;
end;

procedure LoadFont(FName: string; Section: string; smFont: TFont);
var
  FStream: TIniFile;
begin
  FStream := TIniFile.Create(Fname);
  try
    smFont.Name   := FStream.ReadString(Section, 'Name', smFont.Name);
    smFont.CharSet := TFontCharSet(FStream.ReadInteger(Section, 'CharSet', smFont.CharSet));
    smFont.Color  := TColor(FStream.ReadInteger(Section, 'Color', smFont.Color));
    smFont.Size   := FStream.ReadInteger(Section, 'Size', smFont.Size);
    smFont.Style  := TFontStyles(Byte(FStream.ReadInteger(Section, 'Style', Byte(smFont.Style))));
  finally
    FStream.Free;
  end;
end;

//Example:
//Beispiel:

//Save Font
procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveFont('font.ini', 'label', label1.Font);
end;

procedure TForm1.Label1DblClick(Sender: TObject);
begin
  if FontDialog1.Execute then
    label1.Font := FontDialog1.Font
end;

//Load Font
procedure TForm1.Button2Click(Sender: TObject);
begin
  LoadFont('font.ini', 'label', label1.Font);
end;
hier gefunden: www.swissdelphicenter.ch

Meintest Du so etwas?

bcvs 23. Mär 2021 06:56

AW: Schriftart mit Schriftschnitt speichern
 
Zitat:

Zitat von KodeZwerg (Beitrag 1485798)
Meintest Du so etwas?

Wohl kaum, denn:
Zitat:

Zitat von oldman62 (Beitrag 1485792)
Ist aber eine Schriftart mit einem besonderen Schriftschnitt wie "Halb Fett" oder "Fein Schräg" ausgewählt, komme ich nicht weiter da TFontStyles diese nicht kennt.


himitsu 23. Mär 2021 07:18

AW: Schriftart mit Schriftschnitt speichern
 
Da kannst du dich wohl nur über HFONT (Font.Handle) zu LOGFONT oder EXTLOGFONT durchkämpfen und dessen Eigenschaften speichern/zuweisen.
MSDN-Library durchsuchenLOGFONTW
Und hoffen diese API/Record unterstützt alles, was du brauchst. (Wenn nicht, dann ist hier vermutlich Schluß in dem GDI ... Alternativen: GDI+, DirectDraw usw.)


Über TFont direkt kommst bestimmt nicht ran, da das schon halb pervers in TRessource versteckt ist.

Such' mal z.B. nach GetFontData und GetHandleFontData in Vcl.Graphics
oder kämpfe dich von TFont.Style über TFont.SetStyle und TFont.SetData in den FontManager/TResourceManager durch.


Aber das Einfachste wird wohl sein, selbst mit CreateFont/CreateFontIndirect den Font zu erstellen und ihn an Font.Handle zuzuweisen. (oder ihn direkt zu verwenden)

oldman62 23. Mär 2021 10:37

AW: Schriftart mit Schriftschnitt speichern
 
Danke erstmal für die schnelle Unterstützung. Ja der Code von KodeZwerg bringt mich leider nicht weiter, aber Danke. Der Post von himitsu klingt schon vielversprechend aber da ich nicht so in der Materie drinstecke, könnest Du mir vieleicht die Vorgehensweise noch etwas erläutern, gerne mit etwas Code. Danke schonmal.

himitsu 23. Mär 2021 14:00

AW: Schriftart mit Schriftschnitt speichern
 
Neee, hab nix.

Font.Handle ist ein MSDN-Library durchsuchenHFONT (Font-Handle)
und LOGFONT ist die Sruktur, über welche im GDI die Fonts verwaltet/gesteuert werden.

Und GDI ist die API von Windows, welche die VCL intern verwendet, um mit Windows zu reden.

oldman62 24. Mär 2021 07:08

AW: Schriftart mit Schriftschnitt speichern
 
Hallo, habe es Dank Eurer Hilfe erstmal so gelöst.

Code:

procedure TForm1.Button1Click(Sender: TObject);
var LogFont: TLogFontW;
  begin
    if form1.FontDialog1.Execute then
      begin
        form1.Memo1.Lines.Clear;

        FillChar(LogFont, SizeOf(LogFont), 0);
        GetObject(form1.FontDialog1.Font.Handle, SizeOf(TLogFont), @LogFont);

        form1.Memo1.Lines.Add('FaceName:   ' + LogFont.lfFaceName);
        form1.Memo1.Lines.Add('lfWeight:   ' + IntToStr(LogFont.lfWeight));
        form1.Memo1.Lines.Add('lfItalic:   ' + IntToStr(LogFont.lfItalic));
        form1.Memo1.Lines.Add('lfUnderline: ' + IntToStr(LogFont.lfUnderline));
        form1.Memo1.Lines.Add('lfStrikeOut: ' + IntToStr(LogFont.lfStrikeOut));
      end;
  end;
Nur wie ich dem FontDialog das lfWeight wieder übergeben kann weiß ich noch nicht. Aber Danke erstmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz