Marco Web Center

[an error occurred while processing this directive]

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