AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Schriftart mit Schriftschnitt speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Schriftart mit Schriftschnitt speichern

Ein Thema von oldman62 · begonnen am 22. Mär 2021 · letzter Beitrag vom 24. Mär 2021
Antwort Antwort
oldman62

Registriert seit: 29. Dez 2012
6 Beiträge
 
#1

Schriftart mit Schriftschnitt speichern

  Alt 22. Mär 2021, 21:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Schriftart mit Schriftschnitt speichern

  Alt 22. Mär 2021, 22:03
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?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#3

AW: Schriftart mit Schriftschnitt speichern

  Alt 23. Mär 2021, 07:56
Meintest Du so etwas?
Wohl kaum, denn:
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Schriftart mit Schriftschnitt speichern

  Alt 23. Mär 2021, 08:18
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Mär 2021 um 08:27 Uhr)
  Mit Zitat antworten Zitat
oldman62

Registriert seit: 29. Dez 2012
6 Beiträge
 
#5

AW: Schriftart mit Schriftschnitt speichern

  Alt 23. Mär 2021, 11:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Schriftart mit Schriftschnitt speichern

  Alt 23. Mär 2021, 15:00
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
oldman62

Registriert seit: 29. Dez 2012
6 Beiträge
 
#7

AW: Schriftart mit Schriftschnitt speichern

  Alt 24. Mär 2021, 08:08
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:04 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