📄 frxdesgn.pas
字号:
FEditAfterInsert:Boolean;
FDataTree:TfrxDataTreeForm;
FDropFields:Boolean;
FGridAlign:Boolean;
FGridSize1:Extended;
FGridSize2:Extended;
FGridSize3:Extended;
FGridSize4:Extended;
FInspector:TfrxObjectInspector;
FLineStyle:TfrxFrameStyle;
FLocalizedOI:Boolean;
FModifiedBy:TObject;
FMouseDown:Boolean;
FOldDesignerComp:TfrxDesigner;
FOldUnits:TfrxDesignerUnits;
FPagePositions:TStrings;
FRecentFiles:TStringList;
FRecentMenuIndex:Integer;
FReportTree:TfrxReportTreeForm;
FSampleFormat:TSampleFormat;
FScale:Extended;
FScriptFirstTime:Boolean;
FScriptRunning:Boolean;
FScriptStopped:Boolean;
FSearchCase:Boolean;
FSearchIndex:Integer;
FSearchReplace:Boolean;
FSearchReplaceText:String;
FSearchText:String;
FShowGrid:Boolean;
FShowGuides:Boolean;
FShowRulers:Boolean;
FShowStartup:Boolean;
FToolsColor:TColor;
FUndoBuffer:TfrxUndoBuffer;
FUnits:TfrxDesignerUnits;
FUnitsDblClicked:Boolean;
FUpdatingControls:Boolean;
FWorkspace:TfrxDesignerWorkspace;
FWorkspaceColor:TColor;
procedure AttachDialogFormEvents(Attach:Boolean);
procedure CreateColorSelector(Sender:TToolButton);
procedure CreateExtraToolbar;
procedure CreateToolWindows;
procedure CreateObjectsToolbar;
procedure CreateWorkspace;
procedure DialogFormKeyDown(Sender:TObject; var Key:Word; Shift:TShiftState);
procedure DialogFormKeyPress(Sender:TObject; var Key:Char);
procedure DialogFormKeyUp(Sender:TObject; var Key:Word;
Shift:TShiftState);
procedure DialogFormModify(Sender:TObject);
procedure Done;
procedure FindText;
procedure Init;
procedure OnCodeChanged(Sender:TObject);
procedure OnColorChanged(Sender:TObject);
procedure OnComponentMenuClick(Sender:TObject);
procedure OnChangePosition(Sender:TObject);
procedure OnDataTreeDblClick(Sender:TObject);
procedure OnEditObject(Sender:TObject);
procedure OnExtraToolClick(Sender:TObject);
procedure OnInsertObject(Sender:TObject);
procedure OnModify(Sender:TObject);
procedure OnNotifyPosition(ARect:TfrxRect);
procedure OnRunLine(Sender:TfsScript; const UnitName, SourcePos:String);
procedure OnSelectionChanged(Sender:TObject);
procedure OnStyleChanged(Sender:TObject);
procedure OpenRecentFile(Sender:TObject);
procedure ReadButtonImages;
procedure ReloadObjects;
procedure RestorePagePosition;
procedure SavePagePosition;
procedure SaveState;
procedure SetScale(Value:Extended);
procedure SetGridAlign(const Value:Boolean);
procedure SetShowGrid(const Value:Boolean);
procedure SetShowRulers(const Value:Boolean);
procedure SetToolsColor(const Value:TColor);
procedure SetUnits(const Value:TfrxDesignerUnits);
procedure SetWorkspaceColor(const Value:TColor);
procedure SwitchToolbar;
procedure UpdateCaption;
procedure UpdateControls;
procedure UpdateDataControls;
procedure UpdatePageDimensions;
procedure UpdateRecentFiles(NewFile:String);
procedure UpdateStyles;
procedure UpdateSyntaxType;
function AskSave:Word;
function CheckOp(Op:TfrxDesignerRestriction):Boolean;
function GetPageIndex:Integer;
function GetReportName:String;
procedure SetShowGuides(const Value:Boolean);
procedure CMStartup(var Message:TMessage); message WM_USER+1;
protected
procedure SetModified(const Value:Boolean); override;
procedure SetPage(const Value:TfrxPage); override;
function GetCode:TStrings; override;
public
{ Public declarations }
function InsertExpression(const Expr:String):String; override;
procedure LoadFile(FileName:String; UseOnLoadEvent:Boolean);
procedure Lock; override;
procedure ReloadPages(Index:Integer); override;
procedure ReloadReport; override;
procedure RestoreState(RestoreDefault:Boolean = False);
procedure SaveFile(SaveAs:Boolean; UseOnSaveEvent:Boolean);
procedure SwitchToCodeWindow;
procedure UpdateDataTree; override;
procedure UpdatePage; override;
function GetDefaultObjectSize:TfrxPoint;
function mmToUnits(mm:Extended; X:Boolean = True):Extended;
function UnitsTomm(mm:Extended; X:Boolean = True):Extended;
property CodeWindow:TfrxSyntaxMemo read FCodeWindow;
property DataTree:TfrxDataTreeForm read FDataTree;
property DropFields:Boolean read FDropFields write FDropFields;
property EditAfterInsert:Boolean read FEditAfterInsert write FEditAfterInsert;
property GridAlign:Boolean read FGridAlign write SetGridAlign;
property GridSize1:Extended read FGridSize1 write FGridSize1;
property GridSize2:Extended read FGridSize2 write FGridSize2;
property GridSize3:Extended read FGridSize3 write FGridSize3;
property GridSize4:Extended read FGridSize4 write FGridSize4;
property SampleFormat:TSampleFormat read FSampleFormat;
property Scale:Extended read FScale write SetScale;
property ShowGrid:Boolean read FShowGrid write SetShowGrid;
property ShowGuides:Boolean read FShowGuides write SetShowGuides;
property ShowRulers:Boolean read FShowRulers write SetShowRulers;
property ShowStartup:Boolean read FShowStartup write FShowStartup;
property ToolsColor:TColor read FToolsColor write SetToolsColor;
property Units:TfrxDesignerUnits read FUnits write SetUnits;
property Workspace:TfrxDesignerWorkspace read FWorkspace;
property WorkspaceColor:TColor read FWorkspaceColor write SetWorkspaceColor;
end;
TSampleFormat = class(TObject)
private
FMemo:TfrxCustomMemoView;
public
constructor Create;
destructor Destroy; override;
procedure ApplySample(Memo:TfrxCustomMemoView);
procedure SetAsSample(Memo:TfrxCustomMemoView);
property Memo:TfrxCustomMemoView read FMemo;
end;
var
frxDesignerComp:TfrxDesigner;
implementation
{$R *.DFM}
{$R *.RES}
uses
TypInfo, IniFiles, Registry,
frxDsgnIntf, frxUtils, frxPopupForm, frxDesgnWorkspace1,
frxDesgnEditors, frxEditOptions, frxEditReport, frxEditPage, frxAbout,
fs_itools, frxXML, frxEditReportData, frxEditVar, frxEditExpr,
frxEditHighlight, frxEditStyle, frxNewItem, frxStdWizard,
frxEditTabOrder, frxCodeUtils, frxRes, frxrcDesgn, frxDMPClass,
frxEvaluateForm, frxSearchDialog;
type
THackControl = class(TWinControl);
{ TSampleFormat }
constructor TSampleFormat.Create;
begin
FMemo:= TfrxMemoView.Create(nil);
end;
destructor TSampleFormat.Destroy;
begin
FMemo.Free;
inherited;
end;
procedure TSampleFormat.ApplySample(Memo:TfrxCustomMemoView);
begin
Memo.Color:= FMemo.Color;
Memo.Font:= FMemo.Font;
Memo.Frame.Assign(FMemo.Frame);
Memo.BrushStyle:= FMemo.BrushStyle;
Memo.HAlign:= FMemo.HAlign;
Memo.VAlign:= FMemo.VAlign;
Memo.LineSpacing:= FMemo.LineSpacing;
Memo.ParentFont:= FMemo.ParentFont;
end;
procedure TSampleFormat.SetAsSample(Memo:TfrxCustomMemoView);
begin
FMemo.Assign(Memo);
FMemo.FlowTo:= nil;
end;
{ TfrxDesigner }
constructor TfrxDesigner.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FCloseQuery:= True;
frxDesignerComp:= Self;
end;
destructor TfrxDesigner.Destroy;
begin
frxDesignerComp:= nil;
inherited Destroy;
end;
{ TfrxDesignerForm }
{ Form events }
{------------------------------------------------------------------------------}
procedure TfrxDesignerForm.FormCreate(Sender:TObject);
begin
frxResources.LocalizeForm(Self);
ReadButtonImages;
CreateObjectsToolbar;
CreateWorkspace;
CreateToolWindows;
Init;
RestoreState;
CreateExtraToolbar;
ReloadPages(0);
UpdateCaption;
UpdateRecentFiles('');
if (frxDesignerComp<>nil) and Assigned(frxDesignerComp.FOnShow) then
frxDesignerComp.FOnShow(Self);
end;
procedure TfrxDesignerForm.FormDestroy(Sender:TObject);
begin
SaveState;
Done;
end;
procedure TfrxDesignerForm.FormClose(Sender:TObject; var Action:TCloseAction);
begin
FModalFinished:= True;
end;
procedure TfrxDesignerForm.FormCloseQuery(Sender:TObject; var CanClose:Boolean);
var
w:Word;
begin
if FScriptRunning then
begin
CanClose:= False;
Exit;
end;
CanClose:= True;
Report.ScriptText:= CodeWindow.Lines;
if (frxDesignerComp<>nil) and not frxDesignerComp.CloseQuery then
Exit;
if Modified and not (csDesigning in Report.ComponentState) and CheckOp(drDontSaveReport) then
begin
w:= AskSave;
if IsPreviewDesigner then
begin
if w = mrNo then
Modified:= False
end
else if w = mrYes then
SaveFile(False, True);
if not IsPreviewDesigner then
begin
if w = mrNo then
Modified:= False
else
Modified:= True;
end;
if w = mrCancel then
CanClose:= False;
end;
end;
procedure TfrxDesignerForm.FormKeyDown(Sender:TObject; var Key:Word;
Shift:TShiftState);
begin
if (FDialogForm<>nil) and (ActiveControl<>FInspector.Edit1) then
THackControl(FWorkspace).KeyDown(Key, Shift);
if Key = vk_Return then
if ActiveControl = FontSizeCB then
ToolButtonClick(FontSizeCB)
else if ActiveControl = ScaleCB then
ScaleCBClick(Self);
if Page<>nil then
if Key = vk_Insert then
if Shift = [ssShift] then
PasteCmdExecute(nil)
else if Shift = [ssCtrl] then
CopyCmdExecute(nil);
if Key = vk_Delete then
if Shift = [ssShift] then
CutCmdExecute(nil);
if (Key = Ord('E')) and (Shift = [ssCtrl]) then
Page:= nil;
{ code window keys }
// if FPage = nil then
if ((Key = vk_F4) or (Key = vk_F5)) and (Shift = []) then
begin
CodeWindow.BreakPoint:= CodeWindow.GetPos.Y;
RunScriptBClick(StepScriptB);
end
else if (Key = vk_F2) and (Shift = [ssCtrl]) then
StopScriptBClick(StopScriptB)
else if (Key = vk_F7) and (Shift = [ssCtrl]) then
EvaluateBClick(EvaluateB)
else if Key = vk_F9 then
RunScriptBClick(RunScriptB)
else if (Key = vk_F7) or (Key = vk_F8) then
RunScriptBClick(StepScriptB)
end;
procedure TfrxDesignerForm.CMStartup(var Message:TMessage);
begin
if FShowStartup then
if (frxDesignerComp<>nil) and Assigned(frxDesignerComp.FOnShowStartupScreen) then
frxDesignerComp.FOnShowStartupScreen(Self);
end;
{ Get/Set methods }
{------------------------------------------------------------------------------}
function TfrxDesignerForm.GetDefaultObjectSize:TfrxPoint;
begin
case FUnits of
duCM:Result:= frxPoint(fr1cm * 2.5, fr1cm * 0.5);
duInches:Result:= frxPoint(fr1in, fr1in * 0.2);
duPixels:Result:= frxPoint(80, 16);
duChars:Result:= frxPoint(fr1CharX * 10, fr1CharY);
end;
end;
function TfrxDesignerForm.GetCode:TStrings;
begin
Result:= CodeWindow.Lines;
end;
procedure TfrxDesignerForm.SetGridAlign(const Value:Boolean);
begin
FGridAlign:= Value;
AlignToGridB.Down:= FGridAlign;
FWorkspace.GridAlign:= FGridAlign;
end;
procedure TfrxDesignerForm.SetModified(const Value:Boolean);
var
i:Integer;
begin
inherited;
Report.ScriptText:= CodeWindow.Lines;
FUndoBuffer.AddUndo(Report);
FUndoBuffer.ClearRedo;
SaveCmd.Enabled:= Modified;
if FModifiedBy<>Self then
UpdateControls;
if FModifiedBy = FInspector then
if (FSelectedObjects[0] = FPage) or
(TObject(FSelectedObjects[0]) is TfrxSubreport) then
begin
i:= Report.Objects.IndexOf(FPage);
if i >= 0 then
ReloadPages(i);
end;
if FModifiedBy<>FWorkspace then
begin
FWorkspace.UpdateView;
FWorkspace.AdjustBands;
end;
if FModifiedBy<>FInspector then
FInspector.UpdateProperties;
FReportTree.UpdateItems;
FModifiedBy:= nil;
UpdateDataControls;
end;
procedure TfrxDesignerForm.SetPage(const Value:TfrxPage);
begin
inherited;
Tab.TabIndex:= Report.Objects.IndexOf(FPage)+1;
AttachDialogFormEvents(False);
ScrollBoxPanel.Visible:= FPage<>nil;
CodePanel.Visible:= FPage = nil;
SwitchToolbar;
UpdateControls;
if FPage = nil then
begin
CodeWindow.SetFocus;
Exit;
end
else if FPage is TfrxReportPage then
begin
with FWorkspace do
begin
Parent:= ScrollBox;
Align:= alNone;
Color:= FWorkspaceColor;
Scale:= Self.Scale;
end;
if FPage is TfrxDMPPage then
Units:= duChars else
Units:= FOldUnits;
UpdatePageDimensions;
if Visible then
ScrollBox.SetFocus;
end
else
begin
Units:= duPixels;
FDialogForm:= TfrxDialogForm(TfrxDialogPage(FPage).DialogForm);
with FWorkspace do
begin
Parent:= FDialogForm;
Align:= alClient;
GridType:= gtDialog;
GridX:= FGridSize4;
GridY:= FGridSize4;
Color:= TfrxDialogPage(FPage).Color;
Scale:= 1;
SetPageDimensions(0, 0, Rect(0, 0, 0, 0));
end;
with FDialogForm do
begin
BorderStyle:= bsSizeable;
AttachDialogFormEvents(True);
Show;
// SetFocus;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -