Solved

Set the RichEdit1 with the chosen fontname and size.

Posted on 2009-06-29
2
418 Views
Last Modified: 2012-05-07
Dear Experts,

I have a MainForm with a Richtedit on it and a dialog form called Settings
with a Combox (to choose the fontname) and an Edit with an UpDown component
(for choosing the fontsize). The chosen fontname and size will be save and
loaded from an INI-file. Now I have to tell the richedit to load the saved
fontname and size at startup of my application.  How can I do that. Who
can help me...

Greetings,

Peter Kiers



SETTINGS FORM: 
============
 
 private
    { Private declarations }
    fSettingsFile: string; 
    procedure LoadSettings;
    procedure SaveSettings;
  public
    { Public declarations }
  end;
 
var
  SettingsDlg: TSettingsDlg;
  fFontName: string;      
  fFontSize: Integer;    
 
implementation
 
uses Main;
 
{$R *.dfm}
 
procedure TSettingsDlg.FontNameChange(Sender: TObject);
begin
  fFontName := FontName.Items[FontName.ItemIndex];   
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FontSizeChange(Sender: TObject);
begin
  fFontSize := StrToInt(FontSize.Text);       
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveSettings;
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FormCreate(Sender: TObject);
begin
  fSettingsFile := ChangeFileExt(Application.ExeName, '.ini'); 
  FontName.Items := Screen.Fonts;    
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FormShow(Sender: TObject);
begin   
  LoadSettings;  
  FontName.ItemIndex := FontName.Items.IndexOf(fFontName);
  FontSize.Text := IntToStr(fFontSize);
end;
(*-----------------------------------------*)
procedure TSettingsDlg.LoadSettings;
var ini: TIniFile;
begin
  ini := TIniFile.Create(fSettingsFile);
  try
    fFontName := ini.ReadString('FONT', 'FaceName', fFontName);     
    fFontSize := ini.ReadInteger('FONT', 'PointSize', fFontSize);   
  finally
    FreeAndNil(ini);
  end;
end;
(*-----------------------------------------*)
procedure TSettingsDlg.SaveSettings;
var ini: TIniFile;
begin
  ini := TIniFile.Create(fSettingsFile);
  try
    ini.WriteString('FONT', 'FaceName', fFontName);    
    ini.WriteInteger('FONT', 'PointSize', fFontSize);    
  finally
    FreeAndNil(ini);
  end;
end;
(*-----------------------------------------*)
end.
 
MAINFORM: 
============
procedure TMainForm.Settings1Click(Sender: TObject);
var
  dlgSettingsDialog: TSettingsDlg;
  SaveSelStart, SaveSelLength: Integer;
begin
  dlgSettingsDialog := TSettingsDlg.Create(Self);
  try
    dlgSettingsDialog.ShowModal;
  finally
   if RichEdit1.Text <> '' then
    begin
    SaveSelStart := RichEdit1.SelStart;
    SaveSelLength := RichEdit1.SelLength;
    RichEdit1.SelectAll;
    RichEdit1.SelAttributes.Name := dlgSettingsDialog.FontName.Text;
    RichEdit1.SelAttributes.Size := StrToInt(dlgSettingsDialog.FontSize.Text);
    RichEdit1.SelStart := SaveSelStart;
    RichEdit1.SelLength := SaveSelLength;
  end else
  begin
    RichEdit1.Font.Name := dlgSettingsDialog.FontName.Text;
    RichEdit1.Font.Size := StrToInt(dlgSettingsDialog.FontSize.Text);
  end;
  end;
  FreeAndNil(dlgSettingsDialog);
end;

Open in new window

0
Comment
Question by:peterkiers
2 Comments
 
LVL 37

Accepted Solution

by:
Geert Gruwez earned 500 total points
ID: 24735154
i guess you like circular unit referencing ?

try it like this (can be used from any form containing a richedit)
try and prevent global variables, using implementation variables instead !

if the user presses cancel (or close) your code applies the settings anyway ...

it's a little problem to set one way of loading/saving settings.
This time i used the form, most of the time i use a separate object (not a form) for loading/saving the settings

your try finally for dlgSettingsDialog is wrong too ...
SETTINGS FORM: 
============
 
 private
    { Private declarations }
    fSettingsFile: string; 
    fFontName: string;      
    fFontSize: Integer; 
    procedure LoadSettings;
    procedure SaveSettings;
  public
    { Public declarations }
  end;
 
var
  SettingsDlg: TSettingsDlg;
 
procedure RichEditSettings(ARichEdit: TRichEdit; LoadFromIni: Boolean = False);  
 
implementation
 
{$R *.dfm}
 
procedure RichEditSettings(ARichEdit: TRichEdit; LoadFromIni: Boolean = False);  
var
  dlgSettingsDialog: TSettingsDlg;
  SaveSelStart, SaveSelLength: Integer;
  Apply: Boolean;
begin
  if Assigned(ARichEdit) then 
  begin
    dlgSettingsDialog := TSettingsDlg.Create(ARichEdit.Owner);
    try
      Apply := False;
      with dlgSettingsDialog do 
      begin 
        if LoadFromIni then 
        begin
          LoadSettings;
          Apply := True;
        end else if dlgSettingsDialog.ShowModal = mrOk then 
          Apply := True;
        if Apply then 
        begin
          if ARichEdit.Text <> '' then
          begin
            SaveSelStart := ARichEdit.SelStart;
            SaveSelLength := ARichEdit.SelLength;
            ARichEdit.SelectAll;
            ARichEdit.SelAttributes.Name := fFontName;
            ARichEdit.SelAttributes.Size := fFontSize;
            ARichEdit.SelStart := SaveSelStart;
            ARichEdit.SelLength := SaveSelLength;
          end else
          begin
            ARichEdit.Font.Name := fFontName;
            ARichEdit.Font.Size := fFontSize;
          end;
        end;
      end;
    finally
      FreeAndNil(dlgSettingsDialog);
    end;
  end else 
    Raise Exception.Create('Richedit not assigned !');
end;
  
procedure TSettingsDlg.FontNameChange(Sender: TObject);
begin
  fFontName := FontName.Items[FontName.ItemIndex];   
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FontSizeChange(Sender: TObject);
begin
  fFontSize := StrToInt(FontSize.Text);       
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveSettings;
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FormCreate(Sender: TObject);
begin
  fSettingsFile := ChangeFileExt(Application.ExeName, '.ini'); 
  FontName.Items := Screen.Fonts;    
end;
(*-----------------------------------------*)
procedure TSettingsDlg.FormShow(Sender: TObject);
begin   
  LoadSettings;  
  FontName.ItemIndex := FontName.Items.IndexOf(fFontName);
  FontSize.Text := IntToStr(fFontSize);
end;
(*-----------------------------------------*)
procedure TSettingsDlg.LoadSettings;
var ini: TIniFile;
begin
  ini := TIniFile.Create(fSettingsFile);
  try
    fFontName := ini.ReadString('FONT', 'FaceName', fFontName);     
    fFontSize := ini.ReadInteger('FONT', 'PointSize', fFontSize);   
  finally
    FreeAndNil(ini);
  end;
end;
(*-----------------------------------------*)
procedure TSettingsDlg.SaveSettings;
var ini: TIniFile;
begin
  ini := TIniFile.Create(fSettingsFile);
  try
    ini.WriteString('FONT', 'FaceName', fFontName);    
    ini.WriteInteger('FONT', 'PointSize', fFontSize);    
  finally
    FreeAndNil(ini);
  end;
end;
(*-----------------------------------------*)
end.
 
MAINFORM: 
============
procedure TMainForm.Settings1Click(Sender: TObject);
begin
  RichEditSettings(RichEdit1);
end;
 
procedure TMainForm.FormCreate(Sender: TObject);
begin
  RichEditSettings(RichEdit1, True);
end;

Open in new window

0
 
LVL 1

Author Comment

by:peterkiers
ID: 24735402
Wauw, i am impressed. 500 p's comming your way...

Greetings, Peter Kiers
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Print Graphic and Text to Epson TM-T88v 12 257
Run video youtube webbrowse 10 62
oracle global variables 4 68
Performance of SQL statement 37 111
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question