Unit2.pas
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:5k
- unit Unit2;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Buttons, ExtCtrls, RVScroll, RichView, RVEdit, DB, DBTables,
- Unit1;
- type
- TForm2 = class(TForm)
- btnBold: TSpeedButton;
- btnPost: TSpeedButton;
- btnCancel: TSpeedButton;
- btnClose: TSpeedButton;
- RichViewEdit1: TRichViewEdit;
- Panel1: TPanel;
- procedure RichViewEdit1Change(Sender: TObject);
- procedure btnPostClick(Sender: TObject);
- procedure btnCancelClick(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure btnCloseClick(Sender: TObject);
- procedure RichViewEdit1CurTextStyleChanged(Sender: TObject);
- procedure btnBoldClick(Sender: TObject);
- private
- { Private declarations }
- FModified: Boolean;
- FFieldName: String;
- FTable: TTable;
- procedure SetModified(Value: Boolean);
- procedure Load;
- procedure Save;
- property Modified: Boolean read FModified write SetModified;
- public
- { Public declarations }
- procedure SetField(const AFieldName: String; ATable: TTable);
- end;
- var
- Form2: TForm2;
- implementation
- {$R *.DFM}
- {==============================================================================}
- // Simple, but quite useful functions.
- // Earlier version of Delphi do not support TTable.CreateBlobStream...
- {
- function SaveRVFToField(rv: TCustomRichView; tbl: TTable;
- const FieldName: String): Boolean;
- var Stream: TStream;
- begin
- Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmWrite);
- try
- Result := rv.SaveRVFToStream(Stream, False);
- finally
- Stream.Free;
- end;
- end;
- function LoadRVFFromField(rv: TCustomRichView; tbl: TTable;
- const FieldName: String): Boolean;
- var Stream: TStream;
- begin
- Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmRead);
- try
- Result := rv.LoadRVFFromStream(Stream);
- finally
- Stream.Free;
- end;
- rv.Format;
- end;
- }
- {==============================================================================}
- // So below is alternative solution:
- function SaveRVFToField(rv: TCustomRichView; tbl: TTable;
- const FieldName: String): Boolean;
- var Stream: TStream;
- begin
- Stream := TMemoryStream.Create;
- try
- Result := rv.SaveRVFToStream(Stream, False);
- Stream.Position := 0;
- TBlobField(tbl.FieldByName(FieldName)).LoadFromStream(Stream);
- finally
- Stream.Free;
- end;
- end;
- function LoadRVFFromField(rv: TCustomRichView; tbl: TTable;
- const FieldName: String): Boolean;
- var Stream: TStream;
- begin
- Stream := TMemoryStream.Create;
- try
- TBlobField(tbl.FieldByName(FieldName)).SaveToStream(Stream);
- Stream.Position := 0;
- Result := rv.LoadRVFFromStream(Stream);
- finally
- Stream.Free;
- end;
- rv.Format;
- end;
- {==============================================================================}
- procedure TForm2.SetField(const AFieldName: String; ATable: TTable);
- begin
- FTable := ATable;
- FFieldName := AFieldName;
- Load;
- Caption := FTable.FieldByName('Caption').AsString;
- end;
- procedure TForm2.Load;
- begin
- LoadRVFFromField(RichViewEdit1, FTable, FFieldName);
- Modified := False;
- end;
- procedure TForm2.Save;
- begin
- FTable.Edit;
- SaveRVFToField(RichViewEdit1, FTable, FFieldName);
- FTable.Post;
- Modified := False;
- end;
- procedure TForm2.RichViewEdit1Change(Sender: TObject);
- begin
- Modified := True;
- end;
- procedure TForm2.SetModified(Value: Boolean);
- begin
- if FModified<>Value then begin
- FModified := Value;
- if FModified then
- Panel1.Caption := 'Modified'
- else
- Panel1.Caption := '';
- end;
- end;
- procedure TForm2.btnPostClick(Sender: TObject);
- begin
- Save;
- end;
- procedure TForm2.btnCancelClick(Sender: TObject);
- begin
- Load;
- end;
- procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- if Modified then
- case Application.MessageBox('Save changes?', 'Text was modified',
- MB_YESNOCANCEL or MB_ICONQUESTION) of
- IDYES:
- begin
- Save;
- CanClose := True;
- end;
- IDNO:
- CanClose := True;
- IDCANCEL:
- CanClose := False;
- end;
- end;
- procedure TForm2.btnCloseClick(Sender: TObject);
- begin
- Close;
- end;
- procedure TForm2.RichViewEdit1CurTextStyleChanged(Sender: TObject);
- begin
- btnBold.Down := RichViewEdit1.CurTextStyleNo<>0;
- end;
- procedure TForm2.btnBoldClick(Sender: TObject);
- begin
- // switching 1-st and 0-th styles
- if btnBold.Down then
- RichViewEdit1.ApplyTextStyle(1)
- else
- RichViewEdit1.ApplyTextStyle(0);
- end;
- end.