Articles   Members Online: 3
-Article/Tip Search
-News Group Search over 21 Million news group articles.
-Delphi/Pascal
-CBuilder/C++
-C#Builder/C#
-JBuilder/Java
-Kylix
Member Area
-Home
-Account Center
-Top 10 NEW!!
-Submit Article/Tip
-Forums Upgraded!!
-My Articles
-Edit Information
-Login/Logout
-Become a Member
-Why sign up!
-Newsletter
-Chat Online!
-Indexes NEW!!
Employment
-Build your resume
-Find a job
-Post a job
-Resume Search
Contacts
-Contacts
-Feedbacks
-Link to us
-Privacy/Disclaimer
Embarcadero
Visit Embarcadero
Embarcadero Community
JEDI
Links
How to save and restore font selections to a text file Turn on/off line numbers in source code. Switch to Orginial background IDE or DSP color Comment or reply to this aritlce/tip for discussion. Bookmark this article to my favorite article(s). Print this article
12-Oct-02
Category
Files Operation
Language
Delphi 2.x
Views
107
User Rating
No Votes
# Votes
0
Replies
0
Publisher:
DSP, Administrator
Reference URL:
DKB
			Author: Jonas Bilinkevicius

I need to save and restore Font selections to a text file. I was able to convert 
all the font attributes except for style to and from strings using one line 
expressions.

Answer:

Solve 1:

Here's one way of doing it:
1   
2   function StyleToStr(Style: TFontStyles): string;
3   begin
4     SetLength(Result, 4);
5     {T = true, S = false 83 is ordinal value of S, if true then S + 1 (84) = T}
6     Result[1] := Char(Integer(fsBold in Style) + 83);
7     Result[2] := Char(Integer(fsItalic in Style) + 83);
8     Result[3] := Char(Integer(fsUnderline in Style) + 83);
9     Result[4] := Char(Integer(fsStrikeOut in Style) + 83);
10    {replace all S to F's if you like}
11    Result := StringReplace(Result, 'S', 'F', [rfReplaceAll]);
12  end;
13  
14  function StrToStyle(Str: string): TFontStyles;
15  begin
16    Result := [];
17    {T = true, S = false}
18    if Str[1] = 'T' then
19      Include(Result, fsBold);
20    if Str[2] = 'T' then
21      Include(Result, fsItalic);
22    if Str[3] = 'T' then
23      Include(Result, fsUnderLine);
24    if Str[4] = 'T' then
25      Include(Result, fsStrikeOut);
26  end;



Solve 2:

I'd suggest this:
27  
28  function StyleToStr(Style: TFontStyles): string;
29  const
30    Chars: array[Boolean] of Char = ('F', 'T');
31  begin
32    SetLength(Result, 4);
33    Result[1] := Chars[fsBold in Style];
34    Result[2] := Chars[fsItalic in Style];
35    Result[3] := Chars[fsUnderline in Style];
36    Result[4] := Chars[fsStrikeOut in Style];
37  end;



Solve 3:

A more algorithmic approach:
38  
39  function FontStylesToStr(Style: TFontStyles): string;
40  var
41    I: TFontStyle;
42  begin
43    SetLength(Result, High(TFontStyle) + 1);
44    for I := Low(TFontStyle) to High(TFontStyle) do
45      if I in Style then
46        Result[Ord(I) + 1] := 'F'
47      else
48        Result[Ord(I) + 1] := 'T';
49  end;
50  
51  function StrToFontStyles(Str: string): TFontStyles;
52  var
53    I: TFontStyle;
54  begin
55    Result := [];
56    for I := Low(TFontStyle) to High(TFontStyle) do
57      if Str[Ord(I) + 1] = 'T' then
58        Include(Result, I);
59  end;



Solve 4:

May I propose that you save the font style using a numeric representation of the 
bit pattern. One special consideration during the conversion would be the size of 
the enumeration. That is, make sure you use an integer type that has the same 
boundary as the set type. For example, there are four possible font styles in 
TFontStyles, it would be stored as a byte.
60  
61  function FontStylesToInt(Styles: TFontStyles): Integer;
62  begin
63    Result := byte(Styles)
64  end;
65  
66  function IntToFontStyles(Value: integer): TFontStyles;
67  begin
68    Result := TFontStyles(byte(Value))
69  end;


If you are a purist, replace 'integer's with 'byte's

			
Vote: How useful do you find this Article/Tip?
Bad Excellent
1 2 3 4 5 6 7 8 9 10

 

Advertisement
Share this page
Advertisement
Download from Google

Copyright © Mendozi Enterprises LLC