Font in Datei sichern/laden

Komisch is zwar nen bissl umständlich die eigenschaften einzeln zu speichern aber es wird gehen. jetz weiß ich nich welche eigenschaft mir probleme gemacht hat?
naja wenns nich klappt, frage ich nochmal nach!

Danke für den Lichtblick!
 
war doch fast klar oder. wie bekomme ich die Eigenschaften aus dem Sty rausgelesen?

Das sind keine TRUE/FALSE Eigenschaften --

PrintFont.Font.Style.fsbold:=TRUE

das geht nich!
 
aus der onlinehilfe:

In diesem Beispiel wird die Schriftauszeichnung der TLabel-Komponente auf fsBold und fsUnderline gesetzt.

Code:
procedure Form1.Button1Click(Sender: TObject);
begin
   Label1.Font.Style := [fsBold,fsUnderline];
end;

Das folgende Beispiel zeigt, wie gesetzte Schriftauszeichnungen wieder entfernt werden.

Code:
procedure Form1.Button1Click(Sender: TObject);
begin
   Label1.Font.Style := [];
end;
 
und wie sind die nun zu lesen?

das:
IF label1.font.style = [fsbold] THEN..
geht nicht wenn

Label1.Font.Style = [fsBold,fsUnderline]

muss ich jetz ne Procedure 'styleTOstr' entwerfen wo ich jede Kombination abfrage?
sicherlich!
 
Zuletzt bearbeitet:
******e bin fast fertig aber:

Das geht alles
Code:
function strTOsyle(a:STRING):TFontStyle;
BEGIN
  IF a = '[fsbold]' THEN Result:= fsbold;
  IF a = '[fsitalic]' THEN Result:=fsitalic;
  IF a = '[fsunderline]' THEN Result:=fsunderline;
  IF a = '[fsstrikeout]' THEN Result:=fsstrikeout;
...
aber
Code:
  IF a = '[fsbold,fsitalic]' THEN Result:=fsbold,fsitalic;
  oder
  IF a = '[fsbold,fsitalic]' THEN Result:=fsbold + fsitalic;
  oder
  IF a = '[fsbold,fsitalic]' THEN Result:=[fsbold,fsitalic];
  oder
  IF a = '[fsbold,fsitalic]' THEN Result:=[fsbold + fsitalic];
geht nicht?
Wie muss ich denn das Result machen?
 
morgen.
ich hab dir mal eine kleine funktion gebastelt, die einen string in font-stile umwandelt:

Code:
function TForm1.StrToStyle(Str: String): TFontStyles;
var
  Position: Integer;
  StrArray: TStrings;
  i: Integer;
  j: Integer;
begin
  Result := [];
  StrArray := TStrings.Create;
  if Str <> '' then
  begin
    while Str <> '' do
    begin
      Position := Pos(',', Str);
      if j = 0 then j := Length(Str) + 1;
      StrArray.Add(Copy(Str, 1, j - 1));
      Delete(Str, 1, j);
    end;

    for i := 0 to StrArray.Count - 1 do
    begin
      if LowerCase(StrArray[i]) = 'fsbold' then Result := Result + [fsBold];
      if LowerCase(StrArray[i]) = 'fsitalic' then Result := Result + [fsItalic];
      if LowerCase(StrArray[i]) = 'fsunderline' then Result := Result + [fsUnderline];
      if LowerCase(StrArray[i]) = 'fsstrikeout' then Result := Result + [fsStrikeOut];
    end;
  end;
end;

ich krieg zwar irgendwie immer eine ziemlich nichtssagende fehlermeldung ("abstrakter fehler"), aber ich kann dadrin nichts falsches finden. mein delphi spinnt ja sowieso in letzter zeit... :mad:

oder es ist einfach noch zu früh. :rolleyes:
 
Zuletzt bearbeitet:
Es geht!

Morgen :| :-[
Also recht herzlichen Dank Für die Funktion
Die Fehlermeldung habe ich auch bekommen!
ich habe es jetzt so realisiert:

Style zu String...
Code:
function styleTOstr(a:Tfontstyles):STRING;
BEGIN
  IF a = [fsbold] THEN Result:='fsbold' ELSE
  IF a = [fsitalic] THEN Result:='fsitalic' ELSE
  IF a = [fsunderline] THEN Result:='fsunderline' ELSE
  IF a = [fsstrikeout] THEN Result:='fsstrikeout' ELSE

  IF a = [fsbold,fsitalic] THEN Result:='fsbold,fsitalic' ELSE
  IF a = [fsbold,fsunderline] THEN Result:='fsbold,fsunderline' ELSE
  IF a = [fsbold,fsstrikeout] THEN Result:='fsbold,fsstrikeout' ELSE

  IF a = [fsitalic,fsunderline] THEN Result:='fsitalic,fsunderline' ELSE
  IF a = [fsitalic,fsstrikeout] THEN Result:='fsitalic,fsstrikeout' ELSE

  IF a = [fsunderline,fsstrikeout] THEN Result:='fsunderline,fsstrikeout' ELSE

  IF a = [fsbold,fsitalic,fsunderline] THEN Result:='fsbold,fsitalic,fsunderline' ELSE
  IF a = [fsbold,fsitalic,fsstrikeout] THEN Result:='fsbold,fsitalic,fsstrikeout' ELSE
  IF a = [fsbold,fsunderline,fsstrikeout] THEN Result:='fsbold,fsunderline,fsstrikeout' ELSE
  IF a = [fsitalic,fsunderline,fsstrikeout] THEN Result:='fsitalic,fsunderline,fsstrikeout' ELSE

  IF a = [fsbold..fsstrikeout] THEN Result:='fsbold,fsitalic,fsunderline,fsstrikeout' ELSE
  Result:='[]';
END;

... und String zu Style mit Stringlist nicht mit stringarray! da läufts!...

Code:
function StrToStyle(Str: String): TFontStyles;
var
  Position: Integer;
  StrArray: TStringlist;
  i: Integer;
  j: Integer;
begin
  Result := [];
  StrArray := TStringlist.Create;
  if Str <> '' then
  begin
    while Str <> '' do
    begin
      j := Pos(',', Str);
      if j = 0 then j := Length(Str) + 1;
      StrArray.Add(Copy(Str, 1, j - 1));
      Delete(Str, 1, j);
    end;

    for i := 0 to StrArray.Count - 1 do
    begin
      if LowerCase(StrArray.Strings[i]) = 'fsbold' then Result := Result + [fsBold];
      if LowerCase(StrArray.Strings[i]) = 'fsitalic' then Result := Result + [fsItalic];
      if LowerCase(StrArray.Strings[i]) = 'fsunderline' then Result := Result + [fsUnderline];
      if LowerCase(StrArray.Strings[i]) = 'fsstrikeout' then Result := Result + [fsStrikeOut];
    end;
  end;
end;

recht herzlichen Dank! Für alles! es funktioniert!
 
ok, dann war's scheinbar wirklich einfach nur zu früh. :p

trotzdem noch eine kleinigkeit: am ende der funktion solltest du der vollständigkeit halber noch die stringlist aus dem speicher löschen (StrArray.Free). hab ich aber auch vergessen.
 
Auf "Speichererleichterung" habe ich in meinen Programmen noch nie geachtet *peinlich* aber bei größeren Programmen sollte man das wohl machen. Vor allem wenn man die Programme für andere schreibt!

Danke für den Tip!
 
Zurück