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

RichEdit

开发平台:

Delphi

  1. unit Unit2;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   Buttons, ExtCtrls, RVScroll, RichView, RVEdit, DB, DBTables,
  6.   Unit1;
  7. type
  8.   TForm2 = class(TForm)
  9.     btnBold: TSpeedButton;
  10.     btnPost: TSpeedButton;
  11.     btnCancel: TSpeedButton;
  12.     btnClose: TSpeedButton;
  13.     RichViewEdit1: TRichViewEdit;
  14.     Panel1: TPanel;
  15.     procedure RichViewEdit1Change(Sender: TObject);
  16.     procedure btnPostClick(Sender: TObject);
  17.     procedure btnCancelClick(Sender: TObject);
  18.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  19.     procedure btnCloseClick(Sender: TObject);
  20.     procedure RichViewEdit1CurTextStyleChanged(Sender: TObject);
  21.     procedure btnBoldClick(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.     FModified: Boolean;
  25.     FFieldName: String;
  26.     FTable: TTable;
  27.     procedure SetModified(Value: Boolean);
  28.     procedure Load;
  29.     procedure Save;
  30.     property Modified: Boolean read FModified write SetModified;
  31.   public
  32.     { Public declarations }
  33.     procedure SetField(const AFieldName: String; ATable: TTable);
  34.   end;
  35. var
  36.   Form2: TForm2;
  37. implementation
  38. {$R *.DFM}
  39. {==============================================================================}
  40. // Simple, but quite useful functions.
  41. // Earlier version of Delphi do not support TTable.CreateBlobStream...
  42. {
  43. function SaveRVFToField(rv: TCustomRichView; tbl: TTable;
  44.                         const FieldName: String): Boolean;
  45. var Stream: TStream;
  46. begin
  47.   Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmWrite);
  48.   try
  49.     Result := rv.SaveRVFToStream(Stream, False);
  50.   finally
  51.     Stream.Free;
  52.   end;
  53. end;
  54. function LoadRVFFromField(rv: TCustomRichView; tbl: TTable;
  55.                           const FieldName: String): Boolean;
  56. var Stream: TStream;
  57. begin
  58.   Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmRead);
  59.   try
  60.     Result := rv.LoadRVFFromStream(Stream);
  61.   finally
  62.     Stream.Free;
  63.   end;
  64.   rv.Format;
  65. end;
  66. }
  67. {==============================================================================}
  68. // So below is alternative solution:
  69. function SaveRVFToField(rv: TCustomRichView; tbl: TTable;
  70.                         const FieldName: String): Boolean;
  71. var Stream: TStream;
  72. begin
  73.   Stream := TMemoryStream.Create;
  74.   try
  75.     Result := rv.SaveRVFToStream(Stream, False);
  76.     Stream.Position := 0;
  77.     TBlobField(tbl.FieldByName(FieldName)).LoadFromStream(Stream);
  78.   finally
  79.     Stream.Free;
  80.   end;
  81. end;
  82. function LoadRVFFromField(rv: TCustomRichView; tbl: TTable;
  83.                           const FieldName: String): Boolean;
  84. var Stream: TStream;
  85. begin
  86.   Stream := TMemoryStream.Create;
  87.   try
  88.     TBlobField(tbl.FieldByName(FieldName)).SaveToStream(Stream);
  89.     Stream.Position := 0;
  90.     Result := rv.LoadRVFFromStream(Stream);
  91.   finally
  92.     Stream.Free;
  93.   end;
  94.   rv.Format;
  95. end;
  96. {==============================================================================}
  97. procedure TForm2.SetField(const AFieldName: String; ATable: TTable);
  98. begin
  99.   FTable := ATable;
  100.   FFieldName := AFieldName;
  101.   Load;
  102.   Caption := FTable.FieldByName('Caption').AsString;
  103. end;
  104. procedure TForm2.Load;
  105. begin
  106.   LoadRVFFromField(RichViewEdit1, FTable, FFieldName);
  107.   Modified := False;
  108. end;
  109. procedure TForm2.Save;
  110. begin
  111.   FTable.Edit;
  112.   SaveRVFToField(RichViewEdit1, FTable, FFieldName);
  113.   FTable.Post;
  114.   Modified := False;
  115. end;
  116. procedure TForm2.RichViewEdit1Change(Sender: TObject);
  117. begin
  118.   Modified := True;
  119. end;
  120. procedure TForm2.SetModified(Value: Boolean);
  121. begin
  122.   if FModified<>Value then begin
  123.     FModified := Value;
  124.     if FModified then
  125.       Panel1.Caption := 'Modified'
  126.     else
  127.       Panel1.Caption := '';
  128.   end;
  129. end;
  130. procedure TForm2.btnPostClick(Sender: TObject);
  131. begin
  132.   Save;
  133. end;
  134. procedure TForm2.btnCancelClick(Sender: TObject);
  135. begin
  136.   Load;
  137. end;
  138. procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  139. begin
  140.   if Modified then
  141.     case Application.MessageBox('Save changes?', 'Text was modified',
  142.          MB_YESNOCANCEL or MB_ICONQUESTION) of
  143.       IDYES:
  144.         begin
  145.           Save;
  146.           CanClose := True;
  147.         end;
  148.       IDNO:
  149.         CanClose := True;
  150.       IDCANCEL:
  151.         CanClose := False;
  152.     end;
  153. end;
  154. procedure TForm2.btnCloseClick(Sender: TObject);
  155. begin
  156.   Close;
  157. end;
  158. procedure TForm2.RichViewEdit1CurTextStyleChanged(Sender: TObject);
  159. begin
  160.   btnBold.Down := RichViewEdit1.CurTextStyleNo<>0;
  161. end;
  162. procedure TForm2.btnBoldClick(Sender: TObject);
  163. begin
  164.   // switching 1-st and 0-th styles
  165.   if btnBold.Down then
  166.     RichViewEdit1.ApplyTextStyle(1)
  167.   else
  168.     RichViewEdit1.ApplyTextStyle(0);
  169. end;
  170. end.