NO HAY CÓDIGO FUENTE git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.TRichView@1 b34d35ef-135b-4489-b9d1-9916e9c25524
190 lines
4.7 KiB
ObjectPascal
190 lines
4.7 KiB
ObjectPascal
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.
|