📄 rm_desgn.pas
字号:
btnSetHeightToMax: TRMToolbarButton;
ToolbarSep973: TRMToolbarSep;
ToolbarSep9723: TRMToolbarSep;
ToolbarSep9722: TRMToolbarSep;
ToolbarSep9719: TRMToolbarSep;
ToolbarSep9720: TRMToolbarSep;
ToolbarSep9721: TRMToolbarSep;
ToolbarSep9710: TRMToolbarSep;
ToolbarSep979: TRMToolbarSep;
btnSendtoBack: TRMToolbarButton;
btnSelectAll: TRMToolbarButton;
btnBringtoFront: TRMToolbarButton;
ToolbarSep974: TRMToolbarSep;
btnDeletePage: TRMToolbarButton;
btnPageSetup: TRMToolbarButton;
btnAddPage: TRMToolbarButton;
ToolbarSep975: TRMToolbarSep;
GB2: TRMToolbarButton;
GB3: TRMToolbarButton;
GB1: TRMToolbarButton;
ToolbarSep976: TRMToolbarSep;
btnExit: TRMToolbarButton;
btnFontUnderline: TRMToolbarButton;
btnFrameTop: TRMToolbarButton;
btnFrameLeft: TRMToolbarButton;
btnNoFrame: TRMToolbarButton;
btnFrameBottom: TRMToolbarButton;
btnSetFrame: TRMToolbarButton;
btnFrameRight: TRMToolbarButton;
ToolbarSep9711: TRMToolbarSep;
btnTextAlignCenter: TRMToolbarButton;
btnFontBold: TRMToolbarButton;
btnFontItalic: TRMToolbarButton;
btnTextAlignVCenter: TRMToolbarButton;
btnTextAlignLeft: TRMToolbarButton;
HlB1: TRMToolbarButton;
btnTextAlignTop: TRMToolbarButton;
btnTextAlignRight: TRMToolbarButton;
btnTextAlignH: TRMToolbarButton;
btnTextAlignBottom: TRMToolbarButton;
ToolbarSep9712: TRMToolbarSep;
OB1: TRMToolbarButton;
OB2: TRMToolbarButton;
OB3: TRMToolbarButton;
OB4: TRMToolbarButton;
OB5: TRMToolbarButton;
OB6: TRMToolbarButton;
OB7: TRMToolbarButton;
OB8: TRMToolbarButton;
OB9: TRMToolbarButton;
btnAlignVWCenter: TRMToolbarButton;
btnAlignLeft: TRMToolbarButton;
btnAlignHWCenter: TRMToolbarButton;
btnAlignHCenter: TRMToolbarButton;
btnAlignVSE: TRMToolbarButton;
btnAlignHSE: TRMToolbarButton;
btnAlignRight: TRMToolbarButton;
btnAlignBottom: TRMToolbarButton;
btnAlignTop: TRMToolbarButton;
btnAlignVCenter: TRMToolbarButton;
ToolbarSep9713: TRMToolbarSep;
ToolbarSep9714: TRMToolbarSep;
ToolbarSep9715: TRMToolbarSep;
ToolbarSep9716: TRMToolbarSep;
ToolbarSep9717: TRMToolbarSep;
ToolbarSep9718: TRMToolbarSep;
btnInsertFields: TRMToolbarButton;
btnModifyPreviedFirst: TRMToolbarButton;
btnModifyPreviedPrev: TRMToolbarButton;
btnModifyPreviedNext: TRMToolbarButton;
btnModifyPreviedLast: TRMToolbarButton;
btnAutoSave: TRMToolbarButton;
Edit1: TRMEdit;
//WHF Add
procedure OnDockRequestDockEvent(Sender: TObject; Bar: TRMCustomDockableWindow; var Accept: Boolean);
procedure OnFrameWidthExitEvent(Sender: TObject);
procedure OnFrameWidthKeyPress(Sender: TObject; var Key: Char);
procedure OnpadAutoArrangeClick(Sender: TObject);
procedure OpenFile(aFileName: string);
//old
procedure SetCurPage(Value: Integer);
procedure SetGridSize(Value: Integer);
procedure SetGridShow(Value: Boolean);
procedure SetGridAlign(Value: Boolean);
procedure SetUnits(Value: TRMSizeUnits);
procedure SetCurDocName(Value: string);
procedure ShowPosition;
procedure ShowContent;
procedure EnableControls;
procedure ResetSelection;
procedure DeleteObjects(aAddUndoAction: Boolean);
procedure AddPage;
procedure RemovePage(n: Integer);
procedure SetPageTitles;
procedure Unselect;
procedure SelectionChanged;
procedure DefFrameEditor(Sender: TObject);
procedure DefMemoEditor(Sender: TObject);
procedure DefPictureEditor(Sender: TObject);
procedure DefbkPictureEditor(Sender: TObject);
procedure DefTagEditor(Sender: TObject);
procedure DefRestrEditor(Sender: TObject);
procedure DefHighlightEditor(Sender: TObject);
procedure DefFieldEditor(Sender: TObject);
procedure DefDataSourceEditor(Sender: TObject);
procedure DefCrossDataSourceEditor(Sender: TObject);
procedure DefGroupEditor(Sender: TObject);
procedure DefFontEditor(Sender: TObject);
procedure DefCalcMemoEditor(Sender: TObject);
procedure DefScript_BeforePrintEditor(Sender: TObject);
procedure DefScript_AfterPrintEditor(Sender: TObject);
procedure FillInspFields;
function RectTypEnabled: Boolean;
function FontTypEnabled: Boolean;
function ZEnabled: Boolean;
function CutEnabled: Boolean;
function CopyEnabled: Boolean;
function PasteEnabled: Boolean;
function DelEnabled: Boolean;
function EditEnabled: Boolean;
procedure MoveObjects(dx, dy: Integer; Resize: Boolean);
procedure SelectAll;
procedure CutToClipboard;
procedure CopyToClipboard;
procedure SaveState;
procedure RestoreState;
procedure SetOpenFileMenuItems(const aNewFile: string);
procedure ClearBuffer(Buffer: TRMUndoBuffer; var BufferLength: Integer);
procedure ClearUndoBuffer;
procedure ClearRedoBuffer;
procedure Undo(Buffer: PRMUndoBuffer);
procedure ReleaseAction(ActionRec: TRMUndoRec);
procedure AddAction(Buffer: PRMUndoBuffer; a: TRMUndoAction; List: TList);
procedure AddUndoAction(a: TRMUndoAction);
procedure InsFieldsClick(Sender: TObject);
procedure InsertFieldsClick(Sender: TObject);
procedure OnFieldsDialogCloseEvnet(Sender: TObject);
procedure GetDefaultSize(var dx, dy: Integer);
function SelStatus: TRMSelectionStatus;
procedure OnModify(Item: Integer);
procedure PageFormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure PageFormResize(Sender: TObject);
procedure PageFormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
function BeforeEdit: Boolean;
procedure AfterEdit;
procedure DoEdit(ClassRef: TClass);
procedure ShowFieldsDialog(Show: Boolean);
procedure InspSelectionChanged(ObjName: string);
procedure InspGetObjects(List: TStrings);
procedure NotifyParentBands(OldName, NewName: string);
procedure NotifySubReports(OldIndex, NewIndex: Integer);
procedure AssignDefEditors;
{$IFDEF Delphi4}
procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
{$ENDIF}
procedure Localize;
procedure OnFindReplaceView(Sender: TObject);
procedure _EditPreparedReport(aNewPageNo: Integer);
protected
function GetDesignerPage: TWinControl; override;
public
{ Public declarations }
function GetModified: Boolean; override;
procedure SetModified(Value: Boolean); override;
procedure RegisterObject(ButtonBmp: TBitmap; const ButtonHint: string; ButtonTag: Integer; IsControl: Boolean); override;
procedure RegisterTool(MenuCaption: string; ButtonBmp: TBitmap; OnClick: TNotifyEvent); override;
procedure BeforeChange; override;
procedure AfterChange; override;
procedure SelectObject(ObjName: string); override;
function InsertDBField: string; override;
function InsertExpression: string; override;
procedure ShowMemoEditor(Sender: TObject);
procedure ShowEditor;
procedure RedrawPage; override;
function PointsToUnits(x: Double): Double;
function UnitsToPoints(x: Double): Double;
property CurDocName: string read FCurDocName write SetCurDocName;
property CurPage: Integer read FCurPage write SetCurPage;
property GridSizeX: Integer read FGridSizeX write SetGridSize;
property GridSizeY: Integer read FGridSizeY write SetGridSize;
property ShowGrid: Boolean read FGridShow write SetGridShow;
property GridAlign: Boolean read FGridAlign write SetGridAlign;
property Units: TRMSizeUnits read FUnits write SetUnits;
property PageType: TRMPageType read FPageType;
property UseTableName: Boolean read FUseTableName write FUseTableName;
end;
//old
function RMCheckBand(b: TRMBandType): Boolean;
var
RMTemplateDir: string;
FDesignerRestrictions: TRMDesignerRestrictions;
implementation
{$R *.DFM}
{$R *.RES}
{$R RM_LNG2.RES}
{$R RM_LNG3.RES}
uses
Commctrl, Registry, RM_CmpReg, RM_Pgopt, RM_GEdit, RM_FindReplace,
RM_Templ, RM_Newrp, RM_DsOpt, RM_Const, RM_Const1, RM_Prntr, RM_Hilit, RM_Flds, RM_flds1,
RM_Dict, RM_BndEd, RM_VBnd, RM_BTyp, RM_Utils, RM_GrpEd, RM_About,
RM_IFlds, RM_Restr, RM_Pars, RM_DBRel, RM_DBSet, RM_CalcEditor, RM_fmted, RM_FrameProp,
RM_DlgExpr, RM_PageF, rm_Wizard, rm_RptWiz, DB, RM_Property;
type
THackView = class(TRMView)
end;
var
SelNum: Integer; // number of objects currently selected
FirstSelected: TRMView;
MRFlag: Boolean; // several objects was selected
ObjRepeat: Boolean; // was pressed Shift + Insert Object
WasOk: Boolean; // was Ok pressed in dialog
OldRect, OldRect1: TRect; // object rect after mouse was clicked
Busy: Boolean; // busy flag. need!
ShowSizes: Boolean;
LastFontName: string;
LastFrameWidth, LastLineWidth: Single;
LastFrameTyp, LastFontStyle, LastCharset: Word;
LastFrameColor, LastFillColor, LastFontColor: TColor;
LastFontSize, LastAlignment: Integer;
FirstChange: Boolean;
ClipRgn: HRGN;
DesignerComp: TRMDesigner;
InspBusy: Boolean;
// FDesignerRestrictions: TRMDesignerRestrictions;
FClipBd: TList; // clipboard
FClipPage: Integer;
function ClipBd: TList;
begin
if FClipBd = nil then
FClipBd := TList.Create;
Result := FClipBd;
end;
function Objects: TList;
begin
Result := RMDesigner.Page.Objects;
end;
function TopSelected: Integer;
var
i: Integer;
begin
Result := Objects.Count - 1;
for i := Objects.Count - 1 downto 0 do
begin
if TRMView(Objects[i]).Selected then
begin
Result := i;
Break;
end;
end;
end;
function RMCheckBand(b: TRMBandType): Boolean;
var
i: Integer;
t: TRMView;
begin
Result := False;
for i := 0 to Objects.Count - 1 do
begin
t := Objects[i];
if t.Typ = gtBand then
begin
if b = TRMBandView(t).BandType then
begin
Result := True;
Break;
end;
end;
end;
end;
function GetUnusedBand: TRMBandType;
var
b: TRMBandType;
begin
Result := btNone;
for b := btReportTitle to btNone do
begin
if not RMCheckBand(b) then
begin
Result := b;
Break;
end;
end;
if Result = btNone then
Result := btMasterData;
end;
procedure SendBandsToDown;
var
i, j, n, k: Integer;
t: TRMView;
begin
n := Objects.Count; j := 0; i := n - 1;
k := 0;
while j < n do
begin
t := Objects[i];
if t.Typ = gtBand then
begin
Objects.Delete(i);
Objects.Insert(0, t);
Inc(k);
end
else
Dec(i);
Inc(j);
end;
for i := 0 to n - 1 do // sends btOverlay to back
begin
t := Objects[i];
if (t.Typ = gtBand) and (TRMBandView(t).BandType = btOverlay) then
begin
Objects.Delete(i);
Objects.Insert(0, t);
Break;
end;
end;
i := 0; j := 0;
while j < n do // sends btCrossXXX to RMont
begin
t := Objects[i];
if (t.Typ = gtBand) and (TRMBandView(t).BandType in [btCrossHeader..btCrossFooter]) then
begin
Objects.Delete(i);
Objects.Insert(k - 1, t);
end
else
Inc(i);
Inc(j);
end;
end;
procedure ClearClipBoard;
var
m: TMemoryStream;
begin
if Assigned(FClipBd) then
begin
with FClipBd do
begin
while Count > 0 do
begin
m := Items[0];
m.Free;
Delete(0);
end;
end;
end;
end;
procedure GetRegion;
var
i: Integer;
t: TRMView;
R: HRGN;
begin
ClipRgn := CreateRectRgn(0, 0, 0, 0);
for i := 0 to Objects.Count - 1 do
begin
t := Objects[i];
if t.Selected then
begin
R := t.GetClipRgn(rtExtended);
CombineRgn(ClipRgn, ClipRgn, R, RGN_OR);
DeleteObject(R);
end;
end;
FirstChange := False;
end;
function IsBandsSelect(var Value: TRMView): Boolean;
var
i: Integer;
begin
Result := False;
Value := nil;
for i := 0 to Objects.Count - 1 do
begin
Value := Objects[i];
if Value.Selected and (Value.Typ = gtBand) then
begin
Result := True;
Break;
end;
end;
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMDesigner}
constructor TRMDesigner.Create(AOwner: TComponent);
begin
// if Assigned(DesignerComp) then
// raise Exception.Create('You already have one TRMDesigner component');
inherited Create(AOwner);
FCanEditRestrictions := True;
FCloseQuery := True;
DesignerComp := Self;
FHelpFile := 'rmuser.hlp';
FOpenFileCount := 4;
end;
destructor TRMDesigner.Destroy;
begin
DesignerComp := nil;
inherited Destroy;
end;
procedure TRMDesigner.SetOpenFileCount(Value: Integer);
begin
if (Value >= 0) and (Value <= 9) then
FOpenFileCount := Value;
end;
procedure TRMDesigner.SetRestrictions(Value: TRMDesignerRestrictions);
begin
FDesignerRestrictions_1 := Value;
if not (csDesigning in ComponentState) then
FDesignerRestrictions := Value;
end;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{TRMDesignerPage}
constructor TRMDesignerPage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
BevelInner := bvNone;
BevelOuter := bvNone;
Color := clWhite;
BorderStyle := bsNone;
OnMouseDown := MDown;
OnMouseUp := MUp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -