![]() |
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. |
AW: Schriftart mit Schriftschnitt speichern
Willkommen im Forum!
Delphi-Quellcode:
hier gefunden:
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; ![]() Meintest Du so etwas? |
AW: Schriftart mit Schriftschnitt speichern
Zitat:
Zitat:
|
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.
![]() 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) |
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.
|
AW: Schriftart mit Schriftschnitt speichern
Neee, hab nix.
Font.Handle ist ein ![]() 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. |
AW: Schriftart mit Schriftschnitt speichern
Hallo, habe es Dank Eurer Hilfe erstmal so gelöst.
Code:
Nur wie ich dem FontDialog das lfWeight wieder übergeben kann weiß ich noch nicht. Aber Danke erstmal.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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 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-2025 by Thomas Breitkreuz