📄 dbrv.pas
字号:
{===============================} unit DBRV; {==========================}
{ unit DBRV: }
{ components: }
{ TDBRichView, }
{ TDBRichViewEdit }
{ (registered in "RichView" palette page) }
{-----------------------------------------------------------------------}
{ Copyright (C) S.Tkachenko }
{=======================================================================}
interface
{$I RV_Defs.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RVScroll, RichView, RVEdit, DB, DBCtrls, CRVData
{$IFNDEF RICHVIEWCBDEF3}
, DBTables
{$ENDIF}
;
type
TRVDBFieldFormat = (rvdbRVF, rvdbRTF, rvdbText);
TDBRichView = class(TCustomRichView)
private
{ Private declarations }
FDataLink: TFieldDataLink;
FAutoDisplay: Boolean;
FFocused: Boolean;
FMemoLoaded: Boolean;
procedure DataChange(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure SetAutoDisplay(Value: Boolean);
protected
{ Protected declarations }
procedure Loaded; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure DblClick; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure LoadField;
property Field: TField read GetField;
published
{ Published declarations: new for TDBRichView }
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property AutoDisplay: Boolean read FAutoDisplay write SetAutoDisplay default True;
{ Published standard properties }
property Align;
{$IFDEF RICHVIEWDEF4}
property Anchors;
property Constraints;
{$ENDIF}
property Color default clNone;
property Ctl3D;
{$IFDEF RICHVIEWDEF4}
property DragKind;
{$ENDIF}
property DragMode;
property Enabled;
property HelpContext;
property ParentCtl3D;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop default True;
property Visible;
{ Published standard events }
property OnClick;
{$IFDEF RICHVIEWDEF5}
property OnContextPopup;
{$ENDIF}
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseMove;
{$IFDEF RICHVIEWDEF4}
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnResize;
{$ENDIF}
property OnStartDrag;
{ Published RichView properties }
property BackgroundBitmap;
property BackgroundStyle default bsNoBitmap;
property BiDiMode;
property BorderStyle default bsSingle;
property BottomMargin;
property CPEventKind default cpeNone;
property Cursor default crDefault;
property Delimiters;
property DoInPaletteMode;
property FirstJumpNo;
property HScrollVisible;
property LeftMargin;
property MaxTextWidth;
property MinTextWidth;
property Options;
property RightMargin;
property RTFOptions;
property RTFReadProperties;
property RVFOptions;
property RVFParaStylesReadMode;
property RVFTextStylesReadMode;
{$IFDEF RVFLATSCROLLBARS}
property ScrollBarColor;
property ScrollBarStyle;
{$ENDIF}
property Style;
property TabNavigation;
property TopMargin;
property Tracking;
property UseXPThemes;
property VScrollVisible;
{$IFDEF RICHVIEWDEF4}
property WheelStep;
{$ENDIF}
{ Published RichView events }
property OnCheckpointVisible;
property OnControlAction;
property OnCopy;
{$IFDEF RV_ODHC}
property OnDocumentHeightChange;
{$ENDIF}
property OnItemAction;
property OnJump;
property OnHScrolled;
property OnHTMLSaveImage;
property OnPaint;
property OnReadHyperlink;
property OnRVDblClick;
property OnRVFImageListNeeded;
property OnRVFControlNeeded;
property OnRVFPictureNeeded;
property OnRVMouseDown;
property OnRVMouseMove;
property OnRVMouseUp;
property OnRVRightClick;
property OnSaveComponentToFile;
property OnSaveHTMLExtra;
property OnSaveRTFExtra;
property OnSelect;
property OnURLNeeded;
property OnVScrolled;
{ obsolete properties }
property AllowSelection;
property SingleClick;
end;
{-----------------------------------------------------------------------}
TDBRichViewEdit = class(TCustomRichViewEdit)
private
{ Private declarations }
FDataLink: TFieldDataLink;
FAutoDisplay: Boolean;
FFocused: Boolean;
FMemoLoaded: Boolean;
FDataSaveStream: TMemoryStream;
FFieldFormat: TRVDBFieldFormat;
FAutoDeleteUnusedStyles: Boolean;
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function DBGetReadOnly: Boolean;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetFocused(Value: Boolean);
procedure DBSetReadOnly(Value: Boolean);
procedure SetAutoDisplay(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure BeginEditing;
protected
{ Protected declarations }
procedure Loaded; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure DblClick; override;
procedure KeyPress(var Key: Char); override;
public
procedure DoChange(ClearRedo: Boolean); override;
function BeforeChange(FromOutside: Boolean): Boolean; override;
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure LoadField;
property Field: TField read GetField;
published
{ Published declarations: new for TDBRichViewEdit }
property AutoDeleteUnusedStyles: Boolean read FAutoDeleteUnusedStyles write FAutoDeleteUnusedStyles default False;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property ReadOnly: Boolean read DBGetReadOnly write DBSetReadOnly;
property AutoDisplay: Boolean read FAutoDisplay write SetAutoDisplay default True;
property FieldFormat: TRVDBFieldFormat read FFieldFormat write FFieldFormat default rvdbRVF;
{ Published declarations: new for TRichViewEdit }
property EditorOptions;
property UndoLimit;
property OnCaretGetOut;
property OnCaretMove;
property OnChange;
property OnChanging;
property OnCurParaStyleChanged;
property OnCurTextStyleChanged;
property OnParaStyleConversion;
property OnPaste;
property OnStyleConversion;
property TabNavigation;
{ Published standard properties }
property Align;
{$IFDEF RICHVIEWDEF4}
property Anchors;
property Constraints;
{$ENDIF}
property Color default clNone;
property Ctl3D;
{$IFDEF RICHVIEWDEF4}
property DragKind;
{$ENDIF}
property DragMode;
property Enabled;
property HelpContext;
property ParentCtl3D;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop default True;
property UseXPThemes;
property Visible;
{ Published standard events }
property OnClick;
{$IFDEF RICHVIEWDEF5}
property OnContextPopup;
{$ENDIF}
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseMove;
{$IFDEF RICHVIEWDEF4}
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnResize;
{$ENDIF}
property OnStartDrag;
{ Published RichView properties }
property BackgroundBitmap;
property BackgroundStyle default bsNoBitmap;
property BiDiMode;
property BorderStyle default bsSingle;
property BottomMargin;
//property CPEventKind;
property Cursor default crIBeam;
property Delimiters;
property DoInPaletteMode;
property FirstJumpNo;
property HScrollVisible;
property LeftMargin;
property MaxTextWidth;
property MinTextWidth;
property Options;
property RightMargin;
property RTFOptions;
property RTFReadProperties;
property RVFOptions;
property RVFParaStylesReadMode;
property RVFTextStylesReadMode;
{$IFDEF RVFLATSCROLLBARS}
property ScrollBarColor;
property ScrollBarStyle;
{$ENDIF}
property Style;
//property TabNavigation;
property TopMargin;
property Tracking;
property VScrollVisible;
{$IFDEF RICHVIEWDEF4}
property WheelStep;
{$ENDIF}
{ Published RichView events }
//property OnCheckpointVisible;
property OnControlAction;
property OnCopy;
{$IFDEF RV_ODHC}
property OnDocumentHeightChange;
{$ENDIF}
property OnItemAction;
property OnJump;
property OnHScrolled;
property OnHTMLSaveImage;
property OnPaint;
property OnReadHyperlink;
property OnRVDblClick;
property OnRVFImageListNeeded;
property OnRVFControlNeeded;
property OnRVFPictureNeeded;
property OnRVMouseDown;
property OnRVMouseMove;
property OnRVMouseUp;
property OnRVRightClick;
property OnSaveComponentToFile;
property OnSaveHTMLExtra;
property OnSaveRTFExtra;
property OnSelect;
property OnURLNeeded;
property OnVScrolled;
{ obsolete properties }
property AllowSelection;
property SingleClick;
end;
procedure Register;
implementation
{$IFNDEF RICHVIEWDEF3}
function CompareMem(P1, P2: Pointer; Length: Integer): Boolean; assembler;
asm
PUSH ESI
PUSH EDI
MOV ESI,P1
MOV EDI,P2
MOV EDX,ECX
XOR EAX,EAX
AND EDX,3
SHR ECX,2
REPE CMPSD
JNE @@2
MOV ECX,EDX
REPE CMPSB
JNE @@2
@@1: INC EAX
@@2: POP EDI
POP ESI
end;
{$ENDIF}
{============================DBRichView=================================}
constructor TDBRichView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := DataChange;
FAutoDisplay := True;
end;
{-----------------------------------------------------------------------}
destructor TDBRichView.Destroy;
begin
FDataLink.Free;
FDataLink := nil;
inherited Destroy;
end;
{-----------------------------------------------------------------------}
procedure TDBRichView.Loaded;
begin
inherited Loaded;
if (csDesigning in ComponentState) then DataChange(Self);
end;
{-----------------------------------------------------------------------}
procedure TDBRichView.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (FDataLink <> nil) and
(AComponent = DataSource) then DataSource := nil;
end;
{-----------------------------------------------------------------------}
function TDBRichView.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
{-----------------------------------------------------------------------}
procedure TDBRichView.SetDataSource(Value: TDataSource);
begin
if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
FDataLink.DataSource := Value;
if Value <> nil then Value.FreeNotification(Self);
end;
{-----------------------------------------------------------------------}
function TDBRichView.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;
{-----------------------------------------------------------------------}
procedure TDBRichView.SetDataField(const Value: string);
begin
FDataLink.FieldName := Value;
end;
{-----------------------------------------------------------------------}
function TDBRichView.GetField: TField;
begin
Result := FDataLink.Field;
end;
{-----------------------------------------------------------------------}
procedure TDBRichView.SetAutoDisplay(Value: Boolean);
begin
if FAutoDisplay <> Value then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -