Unit1.cpp
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:4k
源码类别:

RichEdit

开发平台:

Delphi

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "RVTable.hpp"
  5. #include "Unit1.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma link "RichView"
  9. #pragma link "RVEdit"
  10. #pragma link "RVScroll"
  11. #pragma link "RVStyle"
  12. #pragma link "RVTable"
  13. #pragma resource "*.dfm"
  14. TForm1 *Form1;
  15. //---------------------------------------------------------------------------
  16. __fastcall TForm1::TForm1(TComponent* Owner)
  17.     : TForm(Owner)
  18. {
  19. }
  20. //---------------------------------------------------------------------------
  21. // Callback function for EnumFontFamilies
  22. int CALLBACK EnumFontCharsets(const ENUMLOGFONT FAR *lpelf,
  23.     const NEWTEXTMETRIC FAR *lpntm,
  24.     int FontType,
  25.     LPARAM lParam)
  26. {
  27.   TForm1 * frm = (TForm1*)lParam;
  28.   frm->Found = lpelf->elfLogFont.lfCharSet==frm->CurrentCharset;
  29.   return (frm->Found)? 0 : 1;
  30. }
  31. //---------------------------------------------------------------------------
  32. void __fastcall TForm1::FormCreate(TObject *Sender)
  33. {
  34.   Screen->Cursor = crHourGlass;
  35.   FillComboBox(cmbA, ARABIC_CHARSET);
  36.   FillComboBox(cmbH, HEBREW_CHARSET);
  37.   rveA->Clear();
  38.   rveH->Clear();
  39.   if (cmbA->Items->Count>0)
  40.   {
  41.     rveA->AddNL("Open Arabic RTF or text file, for example ARABIC.RTF",0,0);
  42.     rveA->Format();
  43.     cmbA->ItemIndex = 0;
  44.     cmbAClick(cmbA);
  45.   }
  46.   else
  47.   {
  48.     rveA->AddNL("There are no Arabic fonts installed",0,0);
  49.     rveA->Format();
  50.     btnOpenA->Enabled = false;
  51.   }
  52.   if (cmbH->Items->Count>0)
  53.   {
  54.     rveH->AddNL("Open Hebrew RTF or text file, for example HEBREW.RTF",0,0);
  55.     rveH->Format();
  56.     cmbH->ItemIndex = 0;
  57.     cmbHClick(cmbH);
  58.   }
  59.   else
  60.   {
  61.     rveH->AddNL("There are no Hebrew fonts installed",0,0);
  62.     rveH->Format();
  63.     btnOpenH->Enabled = false;
  64.   }
  65.   Screen->Cursor = crDefault;
  66. }
  67. //---------------------------------------------------------------------------
  68. // Filling combobox with fonts with given charset
  69. void TForm1::FillComboBox(TComboBox* cmb, TFontCharset Charset)
  70. {
  71.   CurrentCharset = Charset;
  72.   HDC DC = GetDC(0);
  73.   cmb->Items->BeginUpdate();
  74.   for (int i=0; i<Screen->Fonts->Count; i++)
  75.   {
  76.     Found = false;
  77.     EnumFontFamilies(DC, Screen->Fonts->Strings[i].c_str(), (FONTENUMPROC)EnumFontCharsets, (LPARAM)this);
  78.     if (Found)
  79.       cmb->Items->Add(Screen->Fonts->Strings[i]);
  80.   }
  81.   cmb->Items->EndUpdate();
  82.   ReleaseDC(0, DC);
  83. }
  84. //---------------------------------------------------------------------------
  85. // Changing font of all text styles
  86. void TForm1::ApplyFont(const AnsiString FontName, TRVStyle* rvs,
  87.                         TFontCharset Charset,
  88.                         TRichViewEdit* rve)
  89. {
  90.   for (int i=0; i<rvs->TextStyles->Count; i++)
  91.   {
  92.     rvs->TextStyles->Items[i]->FontName = FontName;
  93.     rvs->TextStyles->Items[i]->Charset = Charset;
  94.   }
  95.   rve->SetSelectionBounds(0, rve->GetOffsBeforeItem(0),0, rve->GetOffsBeforeItem(0));
  96.   rve->Format();
  97. }
  98. //---------------------------------------------------------------------------
  99. void TForm1::OpenFile(TRichViewEdit* rve)
  100. {
  101.   if (!od->Execute())
  102.     return;
  103.   rve->Clear();
  104.   bool r = false;
  105.   switch (od->FilterIndex)
  106.   {
  107.     case 1:
  108.       r = rve->LoadRTF(od->FileName);
  109.       break;
  110.     case 2:
  111.       r = rve->LoadText(od->FileName,0,0,false);
  112.       break;
  113.   }
  114.   if (!r)
  115.     Application->MessageBox("Error loading file", "Error", MB_OK | MB_ICONSTOP);
  116.   rve->Format();
  117. }
  118. //---------------------------------------------------------------------------
  119. void __fastcall TForm1::cmbAClick(TObject *Sender)
  120. {
  121.   if (cmbA->ItemIndex>=0)
  122.     ApplyFont(cmbA->Items->Strings[cmbA->ItemIndex], rvsA, ARABIC_CHARSET, rveA);
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TForm1::cmbHClick(TObject *Sender)
  126. {
  127.   if (cmbH->ItemIndex>=0)
  128.     ApplyFont(cmbH->Items->Strings[cmbH->ItemIndex], rvsH, HEBREW_CHARSET, rveH);
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TForm1::btnOpenAClick(TObject *Sender)
  132. {
  133.   OpenFile(rveA);
  134.   cmbAClick(cmbA);
  135. }
  136. //---------------------------------------------------------------------------
  137. void __fastcall TForm1::btnOpenHClick(TObject *Sender)
  138. {
  139.   OpenFile(rveH);
  140.   cmbHClick(cmbH);
  141. }
  142. //---------------------------------------------------------------------------