Articles   Members Online:
-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 properties in the registry (2) 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
28-Sep-02
Category
Win API
Language
Delphi 2.x
Views
107
User Rating
No Votes
# Votes
0
Replies
0
Publisher:
DSP, Administrator
Reference URL:
DKB
			Author: William Gerbert 

I was just wondering what the best way to save a particular font to the registry 
would be. Do I have to save each of its attributes separately? Is there an easier 
way than storing it to the registry, perhaps? Seems like such a simple issue, but 
other than saving and loading each attribute separately, I can't think of a way to 
do it at one time!

Answer:

You can do it by getting a TLogfont record filled and save that to a binary key:


1   var
2     lf: TLogfont;
3   begin
4     fillchar(lf, sizeof(lf), 0);
5     GetObject(font.handle, sizeof(lf), @lf);
6     registry.WriteBinarydata(valuename, lf, sizeof(lf));
7   end;



Reading it back would go like this:


registry.ReadBinarydata(valuename, lf, sizeof(lf));
font.handle := CreateFontIndirect(lf);


A probably more Kylix-compatible method would be to create a non-visual wrapper 
component for a TFont and stream that, e.g. to a memory stream. The streams content 
could then be saved to a binary registry key.


8   type
9     TFontWrapper = class(TComponent)
10    private
11      FFont: TFont;
12      procedure SetFont(f: TFont);
13    public
14      constructor Create(AOwner: TComponent); override;
15      destructor Destroy; override;
16    published
17      property Font: TFont read FFont write SetFont;
18    end;
19  
20  constructor TFontWrapper.Create(AOwner: TComponent);
21  begin
22    inherited Create(aOwner);
23    FFont := TFont.Create;
24  end;
25  
26  destructor TFontWrapper.Destroy;
27  begin
28    FFont.Free;
29    inherited Destroy;
30  end;
31  
32  procedure TFontWrapper.SetFont(f: TFont);
33  begin
34    FFont.Assign(f);
35  end;
36  
37  procedure TScratchMain.SpeedButton2Click(Sender: TObject);
38  const
39    b: Boolean = False;
40  var
41    fw: TFontWrapper;
42    st: TFileStream;
43  begin
44    if b then
45    begin
46      edit1.text := 'Loading font';
47      fw := nil;
48      st := TFileStream.Create('E:\A\test.str', fmOpenRead);
49      try
50        fw := TFontWrapper.Create(nil);
51        st.ReadComponent(fw);
52        memo1.font.assign(fw.font);
53      finally
54        fw.Free;
55        st.Free;
56      end;
57    end
58    else
59    begin
60      edit1.text := 'Saving font';
61      fw := nil;
62      st := TFileStream.Create('E:\A\test.str', fmCreate);
63      try
64        fw := TFontWrapper.Create(nil);
65        fw.Font := Font;
66        st.WriteComponent(fw);
67      finally
68        fw.Free;
69        st.Free;
70      end;
71    end;
72    b := not b;
73  end;


			
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