Marco's Web Center

Menu for Development

Site Menu
Object Pascal Handbook
Delphi Handbooks Collection
Mastering Borland Delphi 2005
(Old) White Papers
(Old)Tools
(Old) Conferences

My Other Sites
Italian Site (www.marcocantu.it)
the delphi search

Spirit of delphi

Advertising
Home My Blog Books Object Pascal Marco

Home: Code Repository: Mastering Delphi 6

Chapter 07 - Project RichBar

Project Structure

RichBar.dpr
program RichBar;

uses
  Forms,
  RichForm in 'RichForm.pas' {FormRichNote};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TFormRichNote, FormRichNote);
  Application.Run;
end.
RichForm.pas
unit RichForm;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, Menus, ActnList, ToolWin, ImgList, ClipBrd,
  RichEdit, AppEvnts;

type
  TFormRichNote = class(TForm)
    RichEdit: TRichEdit;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    ToolBar1: TToolBar;
    tbtnNew: TToolButton;
    tbtnOpen: TToolButton;
    tbtnSave: TToolButton;
    tbtnPrint: TToolButton;
    ToolButton5: TToolButton;
    tbtnUndo: TToolButton;
    tbtnCut: TToolButton;
    tbtnCopy: TToolButton;
    tbtnPaste: TToolButton;
    tbtnBold: TToolButton;
    tbtnItalic: TToolButton;
    ToolButton13: TToolButton;
    ToolButton21: TToolButton;
    Images: TImageList;
    tbtnSize: TToolButton;
    ComboFont: TComboBox;
    SizeMenu: TPopupMenu;
    Small1: TMenuItem;
    Medium1: TMenuItem;
    Large1: TMenuItem;
    ColorBox1: TColorBox;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ApplicationEvents1: TApplicationEvents;
    StatusBar: TStatusBar;
    procedure BoldExecute(Sender: TObject);
    procedure ItalicExecute(Sender: TObject);
    procedure OpenExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure NewExecute(Sender: TObject);
    procedure SaveExecute(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure PrintExecute(Sender: TObject);
    procedure RichEditChange(Sender: TObject);
    procedure CutExecute(Sender: TObject);
    procedure CopyExecute(Sender: TObject);
    procedure PasteExecute(Sender: TObject);
    procedure UndoExecute(Sender: TObject);
    procedure tbtnSizeClick(Sender: TObject);
    procedure SetFontSize(Sender: TObject);
    procedure ComboFontClick(Sender: TObject);
    procedure RichEditSelectionChange(Sender: TObject);
    procedure ColorBox1Change(Sender: TObject);
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    procedure ApplicationEvents1Hint(Sender: TObject);
  private
    FModified: Boolean;
    FileName: string;
    procedure SetModified(const Value: Boolean);
    property Modified: Boolean read FModified write SetModified;
    procedure CheckCapslock;
  public
    function SaveChanges: Boolean;
    function Save: Boolean;
    function SaveAs: Boolean;
  end;

var
  FormRichNote: TFormRichNote;

implementation

{$R *.DFM}

// status bar panels
const
  sbpMessage = 0;
  sbpCaps = 1;
  sbpPosition = 2;

/////////// Font operations

procedure TFormRichNote.BoldExecute(Sender: TObject);
begin
  with RichEdit.SelAttributes do
    if fsBold in Style then
      Style := Style - [fsBold]
    else
      Style := Style + [fsBold];
end;

procedure TFormRichNote.ItalicExecute(Sender: TObject);
begin
  with RichEdit.SelAttributes do
    if fsItalic in Style then
      Style := Style - [fsItalic]
    else
      Style := Style + [fsItalic];
end;

procedure TFormRichNote.tbtnSizeClick(Sender: TObject);
begin
  RichEdit.SelAttributes.Size :=
    RichEdit.SelAttributes.Size + 2;
end;

procedure TFormRichNote.SetFontSize(Sender: TObject);
begin
  RichEdit.SelAttributes.Size :=
    (Sender as TMenuItem).Tag;
end;

procedure TFormRichNote.ComboFontClick(Sender: TObject);
begin
  RichEdit.SelAttributes.Name := ComboFont.Text;
end;

procedure TFormRichNote.ColorBox1Change(Sender: TObject);
begin
  RichEdit.SelAttributes.Color := ColorBox1.Selected;
end;

/////////// File operations

procedure TFormRichNote.NewExecute(Sender: TObject);
begin
  if not Modified or SaveChanges then
  begin
    RichEdit.Text := '';
    Modified := False;
    FileName := '';
    Caption := Application.Title + ' - [Untitled]';
  end;
end;

procedure TFormRichNote.OpenExecute(Sender: TObject);
begin
  if not Modified or SaveChanges then
    if OpenDialog.Execute then
    begin
      Filename := OpenDialog.FileName;
      RichEdit.Lines.LoadFromFile (FileName);
      Modified := False;
      Caption := Application.Title + ' - ' + FileName;
      RichEdit.ReadOnly := ofReadOnly in
        OpenDialog.Options;
    end;
end;

// return False to skip current operation
function TFormRichNote.SaveChanges: Boolean;
begin
  case MessageDlg (
    'The document ' + filename + ' has changed.' +
    #13#13+'Do you want to save the changes?',
    mtConfirmation, mbYesNoCancel, 0) of
  idYes:
    // call Save and return its result
    Result := Save;
  idNo:
    // do not save and continue
    Result := True;
  else // idCancel:
    // do not save and abort operation
    Result := False;
  end;
end;

// return False means the SaveAs has been aborted
function TFormRichNote.Save: Boolean;
begin
  if Filename = '' then
    Result := SaveAs // ask for a file name
  else
  begin
    RichEdit.Lines.SaveToFile (FileName);
    Modified := False;
    Result := True;
  end;
end;

// return False if SaveAs dialog box is cancelled
function TFormRichNote.SaveAs: Boolean;
begin
  SaveDialog.FileName := Filename;
  if SaveDialog.Execute then
  begin
    Filename := SaveDialog.FileName;
    Save;
    Caption := Application.Title  + ' - ' + Filename;
    Result := True;
  end
  else
    Result := False;
end;

procedure TFormRichNote.SaveExecute(Sender: TObject);
begin
  if Modified then
    Save;
end;

procedure TFormRichNote.PrintExecute(Sender: TObject);
begin
  RichEdit.Print (FileName);
end;

/////////// Form events

procedure TFormRichNote.FormCreate(Sender: TObject);
begin
  Application.Title := Caption;
  NewExecute (Self);

  // initialize font selection
  ComboFont.Items := Screen.Fonts;
  ComboFont.ItemIndex := ComboFont.Items.IndexOf (
    RichEdit.Font.Name);
end;

procedure TFormRichNote.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  // short-circuit evaluation: if not modified
  // doesn't even try to save. Doesn't close if
  // save request is cancelled
  CanClose := not Modified or SaveChanges;
end;

// copy and paste operations

procedure TFormRichNote.CutExecute(Sender: TObject);
begin
  RichEdit.CutToClipboard;
end;

procedure TFormRichNote.CopyExecute(Sender: TObject);
begin
  RichEdit.CopyToClipboard;
end;

procedure TFormRichNote.PasteExecute(Sender: TObject);
begin
  RichEdit.PasteFromClipboard;
end;

procedure TFormRichNote.UndoExecute(Sender: TObject);
begin
  RichEdit.Undo;
end;

// richedit events

procedure TFormRichNote.RichEditChange(Sender: TObject);
begin
  // enables save operations
  Modified := True;
end;

procedure TFormRichNote.RichEditSelectionChange(Sender: TObject);
begin
  tbtnBold.Down := fsBold in RichEdit.SelAttributes.Style;
  tbtnItalic.Down := fsItalic in RichEdit.SelAttributes.Style;
  tbtnCut.Enabled := RichEdit.SelLength > 0;
  tbtnCopy.Enabled := tbtnCut.Enabled;

  // select current font and color
  ComboFont.ItemIndex :=
    ComboFont.Items.IndexOf (RichEdit.SelAttributes.Name);
  ColorBox1.Selected := RichEdit.SelAttributes.Color;

  // update the position in the status bar
  StatusBar.Panels[sbpPosition].Text := Format ('%d/%d',
    [RichEdit.CaretPos.Y + 1, RichEdit.CaretPos.X + 1]);
end;

// events/methods udpating toolbar buttons

procedure TFormRichNote.SetModified(const Value: Boolean);
begin
  FModified := Value;
  tbtnSave.Enabled := Modified;
end;

procedure TFormRichNote.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
begin
  // update toolbar buttons
  tbtnPaste.Enabled := SendMessage (
    RichEdit.Handle, em_CanPaste, 0, 0) <> 0;
  CheckCapslock;
end;

procedure TFormRichNote.CheckCapslock;
begin
  // show status in caps panel
  if Odd (GetKeyState (VK_CAPITAL)) then
    StatusBar.Panels[sbpCaps].Text := 'CAPS'
  else
    StatusBar.Panels[sbpCaps].Text := '';
end;

procedure TFormRichNote.ApplicationEvents1Hint(Sender: TObject);
begin
  // show hint in the status bar message panel
  StatusBar.Panels[sbpMessage].Text := Application.Hint;
end;

end.
RichForm.dfm
object FormRichNote: TFormRichNote
  Left = 247
  Top = 229
  Width = 633
  Height = 403
  Caption = 'RichBar'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = True
  OnCloseQuery = FormCloseQuery
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object RichEdit: TRichEdit
    Left = 0
    Top = 24
    Width = 625
    Height = 333
    Align = alClient
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clBlack
    Font.Height = -19
    Font.Name = 'Times New Roman'
    Font.Style = []
    HideScrollBars = False
    ParentFont = False
    ScrollBars = ssBoth
    TabOrder = 0
    OnChange = RichEditChange
    OnSelectionChange = RichEditSelectionChange
  end
  object ToolBar1: TToolBar
    Left = 0
    Top = 0
    Width = 625
    Height = 24
    AutoSize = True
    Flat = True
    Images = Images
    ParentShowHint = False
    ShowHint = True
    TabOrder = 1
    object tbtnNew: TToolButton
      Left = 0
      Top = 0
      Hint = 'New|Create a new document'
      HelpType = htKeyword
      Caption = '&New'
      ImageIndex = 0
      OnClick = NewExecute
    end
    object tbtnOpen: TToolButton
      Left = 23
      Top = 0
      Hint = 'Open|Open an existing RTF file'
      HelpType = htKeyword
      Caption = '&Open...'
      ImageIndex = 1
      OnClick = OpenExecute
    end
    object tbtnSave: TToolButton
      Left = 46
      Top = 0
      Hint = 'Save|Save the current file'
      HelpType = htKeyword
      Caption = '&Save'
      Enabled = False
      ImageIndex = 2
      OnClick = SaveExecute
    end
    object tbtnPrint: TToolButton
      Left = 69
      Top = 0
      Hint = 'Print|Print the current file'
      HelpType = htKeyword
      Caption = '&Print'
      ImageIndex = 3
      OnClick = PrintExecute
    end
    object ToolButton5: TToolButton
      Left = 92
      Top = 0
      Width = 8
      HelpType = htKeyword
      ImageIndex = 4
      Style = tbsSeparator
    end
    object tbtnCut: TToolButton
      Left = 100
      Top = 0
      Hint = 'Cut|Cut the selection to the clipboard'
      HelpType = htKeyword
      Caption = 'Cu&t'
      ImageIndex = 5
      OnClick = CutExecute
    end
    object tbtnCopy: TToolButton
      Left = 123
      Top = 0
      Hint = 'Copy|Copy the selection to the clipboard'
      HelpType = htKeyword
      Caption = '&Copy'
      ImageIndex = 6
      OnClick = CopyExecute
    end
    object tbtnPaste: TToolButton
      Left = 146
      Top = 0
      Hint = 'Paste|Paste the current clipboard content'
      HelpType = htKeyword
      Caption = '&Paste'
      ImageIndex = 7
      OnClick = PasteExecute
    end
    object tbtnUndo: TToolButton
      Left = 169
      Top = 0
      Hint = 'Undo|Undo the last editing action'
      HelpType = htKeyword
      Caption = '&Undo'
      ImageIndex = 4
      OnClick = UndoExecute
    end
    object ToolButton21: TToolButton
      Left = 192
      Top = 0
      Width = 8
      HelpType = htKeyword
      ImageIndex = 16
      Style = tbsSeparator
    end
    object tbtnBold: TToolButton
      Left = 200
      Top = 0
      Hint = 'Bold|Toggle the bold style'
      HelpType = htKeyword
      Caption = '&Bold'
      ImageIndex = 8
      OnClick = BoldExecute
    end
    object tbtnItalic: TToolButton
      Left = 223
      Top = 0
      Hint = 'Italic|Toggle the italic style'
      HelpType = htKeyword
      Caption = '&Italic'
      ImageIndex = 9
      OnClick = ItalicExecute
    end
    object ToolButton13: TToolButton
      Left = 246
      Top = 0
      Width = 8
      HelpType = htKeyword
      ImageIndex = 11
      Style = tbsSeparator
    end
    object tbtnSize: TToolButton
      Left = 254
      Top = 0
      Hint = 'Font Size|Increase or select the font size'
      HelpType = htKeyword
      Caption = 'Font Size'
      DropdownMenu = SizeMenu
      ImageIndex = 13
      Style = tbsDropDown
      OnClick = tbtnSizeClick
    end
    object ToolButton2: TToolButton
      Left = 290
      Top = 0
      Width = 8
      HelpType = htKeyword
      Caption = 'ToolButton2'
      ImageIndex = 15
      Style = tbsSeparator
    end
    object ComboFont: TComboBox
      Left = 298
      Top = 0
      Width = 145
      Height = 21
      Hint = 'Font Family|Choose a font family'
      Style = csDropDownList
      ItemHeight = 13
      TabOrder = 0
      OnClick = ComboFontClick
    end
    object ToolButton1: TToolButton
      Left = 443
      Top = 0
      Width = 8
      HelpType = htKeyword
      Caption = 'ToolButton1'
      ImageIndex = 14
      Style = tbsSeparator
    end
    object ColorBox1: TColorBox
      Left = 451
      Top = 0
      Width = 145
      Height = 22
      Hint = 'Font Color|Choose a color for the font'
      ItemHeight = 16
      TabOrder = 1
      TabStop = True
      OnChange = ColorBox1Change
    end
  end
  object StatusBar: TStatusBar
    Left = 0
    Top = 357
    Width = 625
    Height = 19
    Panels = <
      item
        Width = 300
      end
      item
        Alignment = taCenter
        Width = 50
      end
      item
        Alignment = taCenter
        Text = '1/1'
        Width = 50
      end
      item
        Width = 100
      end>
    SimplePanel = False
  end
  object OpenDialog: TOpenDialog
    DefaultExt = 'rtf'
    Filter = 'Rich Text File (*.rtf)|*.rtf|Any file (*.*)|*.*'
    Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist]
    Left = 24
    Top = 40
  end
  object SaveDialog: TSaveDialog
    DefaultExt = 'rtf'
    Filter = 'Rich Text File (*.rtf)|*.rtf|Any file (*.*)|*.*'
    Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofCreatePrompt]
    Left = 88
    Top = 40
  end
  object Images: TImageList
    Left = 24
    Top = 98
    Bitmap = {
      494C01010E001300040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000005000000001001000000000000028
      0000000000000000000000000000000000003E7A437C033F9041F8038F47CB7A
      0C002845010080757334C4000000DA41010080456E74A07FFF7F284E0100005D
      CB000000EB5DB545EC416C12332BB74125788045F92B4B79C93A7834C0000000
      E80EC4018042E0074527750680459741FA00DB400100003ABE452F38E877B501
      8041F800B428CD230C28DE41010080442572E81CB70380458045945D61708246
      8C5D1B4800093A1835044B4090523D18C900A61D3412103FEE2FBE2D6202002B
      CB7876232C403501BE61E86362038042603A752B4B646868B90080756B2BCB78
      4B034560351228420100005DC30000004B67E841FF7F7F34DC0000005A430100
      80456E74B27FFF7FBE61437C013A8B41F8006B74E179FF7FC33E0800B407CB26
      94440135012C3F2FBB6462080028682A1579FF45250A43108075680000000000
      0000FF7FFF7F01000040FF7FFF7FFF7FFF7FFF7FFF7F01000040FF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F1B2A0402332B
      CB6C4B793F1A3735A045E62CD97B792B4B7D0F42827B0C00CB6BCD2660746C0F
      0300CB79CB26EC7F2572C322780AA11D2D78C9266C3AA71D2D7A3D25AA00B842
      603AA74525084B02C8452D7CCB041B024D10123D103AED7F357CCB65F76C9B64
      03673128FF3A8C452D7EFF3A64747D480300C56D3457FF22884166066B53CB22
      E84425726B5B1360EB5AC56DB40ACB2A8845B37F357E4B04B07F515400008042
      E007442C77068045257A3F2FBB646206802A4B7643768029B62BCB3E8819FB46
      843FC926FC45946258514118031A6550C240901C3D0A4D026548C24090443D04
      340A4B67E848B1008045F842FB07C415770680452D7E8F5B21018F5B8945F015
      F11DF63E9301702BFF3A7C74244703004560257AEB5D2A11B9465D08FF7FFF79
      C5464D08FF7F7F7411010000CB69CD46907FFF7FE846020080465508FF7FFF45
      257C76201408B403CB656878010080452508776C1B60CD26FC116128CB21202B
      7F5878000000CD25907F3504682000008042E007444D77068045257C76201408
      B403CB65E8325C0380413D7E003A98452320E86D5C7FFF50EC3A2310431C003A
      122B00000035942CCD3EC079453400010000CB656879C6018041E802776C1B60
      A045F0462D50683D857EFF413D50053A85463550EB34CD220C28A85D01008045
      6B743D3B0700C33E0C00B472CD42847FFF7F30350774617DFF7FFF3A90412544
      80464512FF7F7F28AA03CB65E82EFE7FFF446674A60B00009364D2004100B620
      00742478FF7F4B684569B4014375E446261EE83D427FFF19E945361E4B63E86B
      0B008050F43A2310431C003A122B2806DE208050F43A23104B00E865527FFF50
      E03A2310431C003A122B2838DD208050E03A23104B00E8735C7FFF50F03A2310
      431C003A122B2820DF208050F03A23104B00240B9200201E873A725981501064
      2010E845477FFF44260AD2004158A8210074BC43FE7F4B684569B4014375F046
      2616E875427F7F59815050342310E82F477FFF45F042723A83416A784D231074
      6E41FE7FD2004174B1210074A24BFE7F492318598150E8382310E819577FFF44
      260ED2004174B1210074844BFE7F492380455008201038082010180920101008
      201020082010142AB437A437AC34333AB030B239252A2839A530A4462000C31E
      1C192310003A8A501C192310E81A05008061332B4469340443627074FA40FE7F
      4B6D4B7813694B63E85A557FFF19E0442612662308004B634560B40143747874
      CE4AFE7F49232063261A04588319724570632412047AE927447FFF412412047A
      E926447F7F66EC72CD208077CD20807CCD20806ECD2080000000006DC7305C26
      476991551E00E027513DB202CE20000600000000000080462000444721101547
      2110000000000000000000000000000000000000000000000000444721101000
      0000703323103008201008092010100920100000000000000000000000000000
      0000000000000000000000000000000000002D491E500C0001411C000141B034
      A3390000000039491E500C0001411C000141E4462110CD227C742C42FE7FE374
      8641FE7F6B78BE2DB92E63000000C017A8415059F2085D630000E8255F53EC41
      607AE95B000080412412047AE928447FFF410000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000FF7F000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000008624A337AE390000454A1E500C00
      01411C0001418024A337AE390000314A1E500C0001411C000141FE1000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00001D4A1E500C0001411C000141000000000000000000000000000000000000
      00000000000000000000FF3F00000000FF7F0000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000F75E000000000000
      F75E000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000EF3D0000F75E000000000000
      F75E000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000EF3D0000EF3D000000000000
      EF3D0000EF3D0000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000F75E00000000000000000000
      00000000F75E0000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000EF3D0000EF3D0000EF3D
      0000EF3D00000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000F75E0000EF3D0000EF3D
      0000EF3D00000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000000000000000F75E0000
      0000000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000EF3D0000EF3D0000
      EF3D000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000EF3D000000000000
      EF3D000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000F75E000000000000
      F75E0000EF3D00000000000000000000EF3D0000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000EF3D000000000000EF3D00000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000EF3D000000000000EF3D00000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000EF3D0000EF3D000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000EF3D0000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000010001000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000001000
      1000100010001000100010001000100010000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000100000000000
      1000000000001000100000000000000000000000000000000000000000000000
      1000100010001000100010001000100010000000000000000000000000001000
      FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000100000000000
      1000000010000000000010000000000000000000000000000000000000000000
      1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000104200421042004210421000
      FF7F000000000000000000000000FF7F10000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000100000000000
      1000000010000000000010000000000000000000000000000000000000000000
      1000FF7F00000000000000000000FF7F10000000004210420042104200421000
      FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000000000000000000000000000
      0000000000000000000010000000000000000000000000000000000010001000
      1000000010000000000010000000000000000000000000000000000000000000
      1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000104200421042004210421000
      FF7F000000000000FF7F10001000100010000000000010001000100010001000
      0000000000000000000010000000000000000000000000000000000000000000
      10000000100010001000000000000000000000000000FF7FFF7FFF7FFF7FFF7F
      1000FF7F00000000000000000000FF7F10000000004210420042104200421000
      FF7FFF7FFF7FFF7FFF7F1000FF7F100000000000000010001000100010000000
      0000000000000000000000001000000000000000000000000000000000000000
      10000000100000000000000000000000000000000000FF7F0000000000000000
      1000FF7FFF7FFF7FFF7FFF7FFF7FFF7F10000000104200421042004210421000
      FF7FFF7FFF7FFF7FFF7F10001000000000000000000010001000100000000000
      0000000000000000000000001000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000FF7FFF7FFF7FFF7FFF7F
      1000FF7F00000000FF7F10001000100010000000004210420042104200421000
      1000100010001000100010000000000000000000000010001000000010000000
      0000000000000000000000001000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000FF7F0000000000000000
      1000FF7FFF7FFF7FFF7F1000FF7F100000000000104200421042004210420042
      1042004210420042104200420000000000000000000010000000000000001000
      1000000000000000000010000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000FF7FFF7FFF7FFF7FFF7F
      1000FF7FFF7FFF7FFF7F10001000000000000000004210420000000000000000
      0000000000000000104210420000000000000000000000000000000000000000
      0000100010001000100000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000FF7F00000000FF7F0000
      1000100010001000100010000000000000000000104210420000000000000000
      0000000000000000104200420000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F0000
      FF7F0000000000000000000000000000000000000042104200420000E07F0000
      0000E07F00001042004210420000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F0000
      000000000000000000000000000000000000000000000000000000000000E07F
      E07F000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000420042000000000000
      0000000000000000000000000042000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000000000420042004200420042
      0042004200420042000000000000000000000000000000420042000000000000
      0000000000000000000000000042000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000E07F00000042004200420042
      0042004200420042004200000000000000000000000000420042000000000000
      0000000000000000000000000042000000000000000000000000000000000000
      E07FE07FE07F000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000FF7FE07F0000004200420042
      0042004200420042004200420000000000000000000000420042000000000000
      0000000000000000000000000042000000000000000000000000000000000000
      104210421042000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000E07FFF7FE07F000000420042
      0042004200420042004200420042000000000000000000420042004200420042
      0042004200420042004200420042000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000FF7FE07FFF7FE07F00000000
      0000000000000000000000000000000000000000000000420042000000000000
      0000000000000000000000420042000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000E07FFF7FE07FFF7FE07FFF7F
      E07FFF7FE07F0000000000000000000000000000000000420000000000000000
      0000000000000000000000000042000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000FF7FE07FFF7FE07FFF7FE07F
      FF7FE07FFF7F0000000000000000000000000000000000420000000000000000
      000000000000000000000000004200000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7F00000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F00000000000000000000E07FFF7FE07F000000000000
      0000000000000000000000000000000000000000000000420000000000000000
      0000000000000000000000000042000000000000000000000000FF7F00000000
      000000000000FF7F00000000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7F00000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000420000000000000000
      0000000000000000000000000042000000000000000000000000FF7FFF7FFF7F
      FF7FFF7FFF7FFF7FFF7F0000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7F0000FF7F000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000420000000000000000
      00000000000000000000000000000000000000000000000000000000FF7F0000
      0000000000000000FF7F0000000000000000000000000000FF7FFF7FFF7FFF7F
      FF7FFF7F00000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000420000000000000000
      00000000000000000000000000000000000000000000000000000000FF7FFF7F
      FF7FFF7FFF7FFF7FFF7FFF7F0000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000424D3E000000000000003E000000
      2800000040000000500000000100010000000000800200000000000000000000
      000000000000000000000000FFFFFF0000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000FFFFFFFF00000000FFFF8E2300000000
      FFFF8E2300000000C0078E2300000000FFFF8023DFFFDFFFF807C0630000DFFF
      FFFFC4630000FFFFC007C463FFFFFFFFFFFFE0E3FFFFFFFFF807E0E3FFFFFFFF
      FFFFE0E300000000C007E08000000000FFFFFFC100000000F807FFC100000000
      FFFFFFE300000000FFFFFFF700000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
      FFFFFFFFFFFFFFFFFFFFFFFFC007C007F00F81FFFFFFFFFFF8C7E3FFC03FF83F
      F8C7F1FFFFFFFFFFF8C7F8FFC007C007F80FFC7FFFFFFFFFF8C7FE3FC03FF01F
      F8C7FF1FFFFFFFFFF8C7FF8FC007C007F00FFF03FFFFFFFFFFFFFFFFC03FF83F
      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFFFC00
      FFFFF6CFFE008000FFFFF6B7FE000000FFFFF6B7FE000000FFF7F8B780000000
      C1F7FE8F80000001C3FBFE3F80000003C7FBFF7F80000003CBFBFE3F80010003
      DCF7FEBF80030003FF0FFC9F80070FC3FFFFFDDF807F0003FFFFFDDF80FF8007
      FFFFFDDF81FFF87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC001C007
      C007001F8031BFEBC007000F80310005C007000780317E31C007000380017E35
      C007000180010006C007000080017FEAC007001F8FF18014C007001F8FF1C00A
      C007001F8FF1E001C0078FF18FF1E007C00FFFF98FF1F007C01FFF758FF5F003
      C03FFF8F8001F803FFFFFFFFFFFFFFFF00000000000000000000000000000000
      000000000000}
  end
  object SizeMenu: TPopupMenu
    Left = 152
    Top = 48
    object Small1: TMenuItem
      Tag = 10
      Caption = 'Small'
      OnClick = SetFontSize
    end
    object Medium1: TMenuItem
      Tag = 16
      Caption = 'Medium'
      OnClick = SetFontSize
    end
    object Large1: TMenuItem
      Tag = 32
      Caption = 'Large'
      OnClick = SetFontSize
    end
  end
  object ApplicationEvents1: TApplicationEvents
    OnIdle = ApplicationEvents1Idle
    OnHint = ApplicationEvents1Hint
    Left = 88
    Top = 104
  end
end