📄 frxdesgn.pas
字号:
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 = []) and (Page = nil) 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]) and (Page = nil) then
EvaluateBClick(EvaluateB)
else if Key = vk_F9 then
RunScriptBClick(RunScriptB)
else if ((Key = vk_F7) or (Key = vk_F8)) and (Page = nil) 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;
procedure TfrxDesignerForm.WMSysCommand(var Message: TWMSysCommand);
begin
if Message.CmdType and $FFF0 = SC_MINIMIZE then
Application.Minimize
else
inherited;
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 if FPage is TfrxDialogPage then
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;
if FDialogForm <> nil then
with FDialogForm do
begin
Position := poDesigned;
BorderStyle := bsSizeable;
AttachDialogFormEvents(True);
Show;
end;
end
else
begin
Report.Errors.Add('Page object is not page');
end;
ReloadObjects;
RestorePagePosition;
UpdateDataControls;
end;
procedure TfrxDesignerForm.SetScale(Value: Extended);
begin
ScrollBox.AutoScroll := False;
if Value = 0 then
Value := 1;
if Value > 20 then
Value := 20;
FScale := Value;
TopRuler.Scale := Value;
LeftRuler.Scale := Value;
FWorkspace.Scale := Value;
ScaleCB.Text := IntToStr(Round(FScale * 100)) + '%';
UpdatePageDimensions;
ScrollBox.AutoScroll := True;
end;
procedure TfrxDesignerForm.SetShowGrid(const Value: Boolean);
begin
FShowGrid := Value;
ShowGridB.Down := FShowGrid;
FWorkspace.ShowGrid := FShowGrid;
end;
procedure TfrxDesignerForm.SetShowRulers(const Value: Boolean);
begin
FShowRulers := Value;
TopRuler.Visible := FShowRulers;
LeftRuler.Visible := FShowRulers;
ShowRulersMI.Checked := FShowRulers;
end;
procedure TfrxDesignerForm.SetShowGuides(const Value: Boolean);
begin
FShowGuides := Value;
TDesignerWorkspace(FWorkspace).ShowGuides := FShowGuides;
ShowGuidesMI.Checked := FShowGuides;
end;
procedure TfrxDesignerForm.SetUnits(const Value: TfrxDesignerUnits);
var
s: String;
gType: TfrxGridType;
gSizeX, gSizeY: Extended;
begin
FUnits := Value;
s := '';
if FUnits = duCM then
begin
s := frxResources.Get('dsCm');
gType := gt1cm;
gSizeX := FGridSize1 * fr1cm;
gSizeY := gSizeX;
end
else if FUnits = duInches then
begin
s := frxResources.Get('dsInch');
gType := gt1in;
gSizeX := FGridSize2 * fr1in;
gSizeY := gSizeX;
end
else if FUnits = duPixels then
begin
s := frxResources.Get('dsPix');
gType := gt1pt;
gSizeX := FGridSize3;
gSizeY := gSizeX;
end
else {if FUnits = duChars then}
begin
s := frxResources.Get('dsChars');
gType := gtChar;
gSizeX := fr1CharX;
gSizeY := fr1CharY;
end;
StatusBar.Panels[0].Text := s;
TopRuler.Units := TfrxRulerUnits(FUnits);
LeftRuler.Units := TfrxRulerUnits(FUnits);
with FWorkspace do
begin
GridType := gType;
GridX := gSizeX;
GridY := gSizeY;
AdjustBands;
end;
if FSelectedObjects.Count <> 0 then
OnSelectionChanged(Self);
end;
procedure TfrxDesignerForm.SetToolsColor(const Value: TColor);
begin
FToolsColor := Value;
FInspector.SetColor(Value);
FDataTree.SetColor(Value);
FReportTree.SetColor(Value);
end;
procedure TfrxDesignerForm.SetWorkspaceColor(const Value: TColor);
begin
FWorkspaceColor := Value;
if not (FPage is TfrxDialogPage) then
FWorkspace.Color := Value;
end;
{ Service methods }
{------------------------------------------------------------------------------}
procedure TfrxDesignerForm.Init;
var
i: Integer;
begin
FScale := 1;
ScrollBoxPanel.Align := alClient;
CodePanel.Align := alClient;
fsGetLanguageList(LangCB.Items);
LangCB.ItemIndex := LangCB.Items.IndexOf(Report.ScriptLanguage);
frxAddCodeRes;
UpdateSyntaxType;
UpdateStyles;
FUndoBuffer := TfrxUndoBuffer.Create;
FUndoBuffer.AddUndo(Report);
FClipboard := TfrxClipboard.Create(Self);
Timer.Enabled := True;
FRecentFiles := TStringList.Create;
FRecentMenuIndex := FileMenu.IndexOf(SepMI4);
{$IFDEF Delphi5}
MainMenu.AutoHotKeys := maManual;
{$ENDIF}
FSampleFormat := TSampleFormat.Create;
FPagePositions := TStringList.Create;
for i := 1 to 256 do
FPagePositions.Add('');
if IsPreviewDesigner then
begin
FOldDesignerComp := frxDesignerComp;
TfrxDesigner.Create(nil);
frxDesignerComp.Restrictions := [drDontDeletePage, drDontCreatePage,
drDontCreateReport, drDontLoadReport, drDontPreviewReport,
drDontEditVariables, drDontChangeReportOptions];
ObjectBandB.Enabled := False;
end;
Report.SelectPrinter;
FontNameCB.PopulateList;
{$IFDEF FR_VER_BASIC}
NewDialogCmd.Enabled := False;
{$ENDIF}
NewReportCmd.Enabled := CheckOp(drDontCreateReport);
NewItemCmd.Enabled := CheckOp(drDontCreateReport);
NewPageCmd.Enabled := CheckOp(drDontCreatePage);
NewDialogCmd.Enabled := NewDialogCmd.Enabled and CheckOp(drDontCreatePage);
SaveAsCmd.Enabled := CheckOp(drDontSaveReport);
OpenCmd.Enabled := CheckOp(drDontLoadReport);
ReportSettingsMI.Enabled := CheckOp(drDontChangeReportOptions);
ReportStylesMI.Enabled := CheckOp(drDontChangeReportOptions);
ReportDataMI.Enabled := CheckOp(drDontEditReportData);
VariablesCmd.Enabled := CheckOp(drDontEditVariables);
PreviewCmd.Enabled := CheckOp(drDontPreviewReport);
end;
procedure TfrxDesignerForm.Done;
begin
AttachDialogFormEvents(False);
if IsPreviewDesigner then
begin
frxDesignerComp.Free;
frxDesignerComp := FOldDesignerComp;
end;
FUndoBuffer.Free;
FClipboard.Free;
FRecentFiles.Free;
FSampleFormat.Free;
FPagePositions.Free;
end;
procedure TfrxDesignerForm.ReadButtonImages;
var
MainImages, DisabledImages, ObjectImages: TImageList;
begin
MainImages := frxResources.MainButtonImages;
DisabledImages := frxResources.DisabledButtonImages;
ObjectImages := frxResources.ObjectImages;
CodeTB.Images := MainImages;
CodeTB.DisabledImages := DisabledImages;
StandardTB1.Images := MainImages;
StandardTB1.DisabledImages := DisabledImages;
TextTB1.Images := MainImages;
TextTB1.DisabledImages := DisabledImages;
FrameTB1.Images := MainImages;
FrameTB1.DisabledImages := DisabledImages;
AlignTB1.Images := MainImages;
AlignTB1.DisabledImages := DisabledImages;
ExtraToolsTB1.Images := MainImages;
ExtraToolsTB1.DisabledImages := DisabledImages;
ObjectsTB1.Images := ObjectImages;
ObjectsPopup.Images := ObjectImages;
MainMenu.Images := MainImages;
PagePopup.Images := MainImages;
TabPopup.Images := MainImages;
ActionList.Images := MainImages;
BandsPopup.Images := MainImages;
DataLV.LargeImages := ObjectImages;
end;
procedure TfrxDesignerForm.CreateToolWindows;
begin
FInspector := TfrxObjectInspector.Create(Self);
with FInspector do
begin
OnModify := Self.OnModify;
OnSelectionChanged := Self.OnSelectionChanged;
SelectedObjects := FSelectedObjects;
end;
FDataTree := TfrxDataTreeForm.Create(Self);
FDataTree.Report := Report;
FDataTree.CBPanel.Visible := True;
FDataTree.OnDblClick := OnDataTreeDblClick;
UpdateDataTree;
FReportTree := TfrxReportTreeForm.Create(Self);
FReportTree.OnSelectionChanged := OnSelectionChanged;
end;
procedure TfrxDesignerForm.CreateWorkspace;
begin
FWorkspace := TDesignerWorkspace.Create(Self);
with FWorkspace do
begin
Parent := ScrollBox;
OnNotifyPosition := Self.OnNotifyPosition;
OnInsert := OnInsertObject;
OnEdit := OnEditObject;
OnModify := Self.OnModify;
OnSelectionChanged := Self.OnSelectionChanged;
OnTopLeftChanged := ScrollBoxResize;
PopupMenu := PagePopup;
Objects := FObjects;
SelectedObjects := FSelectedObjects;
end;
FCodeWindow := TfrxSyntaxMemo.Create(Self);
with FCodeWindow do
begin
Parent := CodePanel;
Align := alClient;
Lines := Report.ScriptText;
Color := clWindow;
OnChangeText := OnCodeChanged;
OnChangePos := OnChangePosition;
OnDragOver := CodeWindowDragOver;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -