📄 rm_editordictionary.pas
字号:
s := aNode.Item[i].Text;
n := FFieldAliases.IndexOf(lItemName + '."' + GetItemName(s) + '"');
if n <> -1 then
FFieldAliases.Delete(n);
end;
btnFieldDeleteAll.Enabled := treeFieldAliases.Items.Count > 1;
end;
begin
lNode := treeFieldAliases.Selected;
if (lNode = nil) or (lNode.ImageIndex <> Dataset_INDEX) then Exit;
treeFieldAliasesExpanding(nil, lNode, lFlag);
s := GetItemName(lNode.Text);
_DeleteFieldAlias(lNode);
lstAllDataSets.Items.Add(s);
lNode.Delete;
FFieldAliases.Delete(FFieldAliases.IndexOf(s));
treeFieldAliasesChange(nil, nil);
end;
procedure TRMDictionaryForm.treeFieldAliasesExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
var
i, lIndex, lImageIndex: Integer;
lFieldList: TStringList;
lItemName, lStr: string;
lNode: TTreeNode;
lDataSet: TRMDataSet;
begin
if Node.ImageIndex = 3 then
AllowExpansion := False
else if (Node.ImageIndex = Dataset_INDEX) and (Node.GetLastChild.ImageIndex = 0) then
begin
Node.DeleteChildren;
lFieldList := TStringList.Create;
lItemName := GetItemName(Node.Text);
lDataSet := THackDictionary(CurReport.Dictionary).FindDataSet(lItemName, CurReport.Owner, lStr);
if lDataSet <> nil then
begin
try
lDataSet.GetFieldsList(lFieldList);
// CurReport.Dictionary.GetDataSetFields(ItemName, sl);
except;
end;
for i := 0 to lFieldList.Count - 1 do
begin
lImageIndex := Field_CanSelect;
lStr := lFieldList[i];
lIndex := FFieldAliases.IndexOf(lItemName + '."' + lStr + '"');
if lIndex >= 0 then
begin
if FFieldAliases.Value[lIndex] <> '' then
lStr := lStr + ' {' + FFieldAliases.Value[lIndex] + '}'
else
lImageIndex := Field_CannotSelect;
end
else
begin
// lDisplayLabel := lDataSet.GetFieldDisplayLabel(lStr);
// if lDisplayLabel <> lStr then
// begin
// FFieldAliases[Node.Text + '."' + lStr + '"'] := lDisplayLabel;
// lStr := lStr + ' {' + lDisplayLabel + '}'
// end;
end;
treeFieldAliases.Items.AddChild(Node, lStr);
lNode := Node.GetLastChild;
lNode.ImageIndex := lImageIndex;
lNode.SelectedIndex := lImageIndex;
end;
end;
lFieldList.Free;
end;
end;
procedure TRMDictionaryForm.edtFieldAliasKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then
treeFieldAliases.SetFocus;
end;
procedure TRMDictionaryForm.edtFieldAliasExit(Sender: TObject);
var
s: string;
begin
if edtFieldAlias.Modified then
begin
if (FActiveNode <> nil) and (FActiveNode <> treeFieldAliases.Items[0]) then
begin
s := GetItemName(FActiveNode.Text);
FActiveNode.Text := s + ' {' + edtFieldAlias.Text + '}';
if FActiveNode.ImageIndex = Field_CanSelect then
s := GetItemName(FActiveNode.Parent.Text) + '."' + s + '"';
if (not chkFieldNoSelect.Checked) and (edtFieldAlias.Text = '') then
begin
FFieldAliases.Delete(FFieldAliases.IndexOf(s));
end
else
FFieldAliases[s] := edtFieldAlias.Text;
end;
end;
edtFieldAlias.Modified := False;
end;
procedure TRMDictionaryForm.btnFieldAddAllClick(Sender: TObject);
var
i: Integer;
begin
for i := 0 to lstAllDataSets.Items.Count - 1 do
AddFieldAlias(lstAllDataSets.Items[i]);
lstAllDataSets.Items.Clear;
treeFieldAliases.Items[0].Expand(False);
treeFieldAliases.Selected := treeFieldAliases.Items[0];
end;
procedure TRMDictionaryForm.btnFieldDeleteAllClick(Sender: TObject);
var
i: Integer;
begin
for i := 0 to FFieldAliases.Count - 1 do
begin
if Pos('"', FFieldAliases.Name[i]) = 0 then
lstAllDataSets.Items.Add(FFieldAliases.Name[i]);
end;
FFieldAliases.Clear;
treeFieldAliases.Items[0].DeleteChildren;
btnFieldDeleteAll.Enabled := treeFieldAliases.Items.Count > 1;
treeFieldAliasesChange(nil, nil);
end;
procedure TRMDictionaryForm.cmbDataSetsClick(Sender: TObject);
begin
if cmbDataSets.ItemIndex >= 0 then
begin
RMDesigner.Report.Dictionary.GetDataSetFields(cmbDataSets.Items[cmbDataSets.ItemIndex],
lstFields.Items, FFieldAliases);
end
else
lstFields.Items.Clear;
lstFields.Items.Insert(0, RMLoadStr(SNotAssigned));
end;
procedure TRMDictionaryForm.edtExpressionEnter(Sender: TObject);
begin
FActiveNode := treeVariables.Selected;
end;
procedure TRMDictionaryForm.edtExpressionExit(Sender: TObject);
begin
if (FActiveNode = nil) or (FActiveNode.ImageIndex <> 6) then Exit;
if edtExpression.Modified then
begin
FVariables[FActiveNode.Text] := edtExpression.Text;
end;
edtExpression.Modified := False;
FActiveNode := nil;
end;
procedure TRMDictionaryForm.PageControl1Change(Sender: TObject);
begin
FActiveNode := nil;
if PageControl1.ActivePage = TabSheet1 then
begin
FillValiableDataSets;
treeVariablesChange(nil, treeVariables.Selected);
end;
end;
procedure TRMDictionaryForm.chkFieldNoSelectClick(Sender: TObject);
var
liNode: TTreeNode;
ItemName, FullName: string;
begin
if FBusyFlag then Exit;
liNode := treeFieldAliases.Selected;
if (liNode = nil) or (liNode = treeFieldAliases.Items[0]) then Exit;
if liNode.ImageIndex in [Field_CanSelect, Field_CannotSelect] then
begin
ItemName := GetItemName(liNode.Text);
FullName := GetItemName(liNode.Parent.Text) + '."' + ItemName + '"';
if liNode.ImageIndex = Field_CanSelect then
liNode.ImageIndex := Field_CannotSelect
else
liNode.ImageIndex := Field_CanSelect;
liNode.SelectedIndex := liNode.ImageIndex;
if liNode.ImageIndex = Field_CanSelect then
FFieldAliases.Delete(FFieldAliases.IndexOf(FullName))
else
FFieldAliases[FullName] := '';
liNode.Text := ItemName;
end;
end;
procedure TRMDictionaryForm.treeFieldAliasesChange(Sender: TObject; Node: TTreeNode);
var
s: string;
begin
if edtFieldAlias.Modified then edtFieldAliasExit(nil);
FActiveNode := treeFieldAliases.Selected;
btnFieldDeleteOne.Enabled := (FActiveNode.ImageIndex = Dataset_INDEX);
btnFieldDeleteAll.Enabled := treeFieldAliases.Items.Count > 1;
if FActiveNode <> treeFieldAliases.Items[0] then
begin
s := FActiveNode.Text;
if Pos('{', s) <> 0 then
s := Copy(s, Pos('{', s) + 1, Pos('}', s) - Pos('{', s) - 1);
edtFieldAlias.Text := s;
end
else
edtFieldAlias.Text := '';
FBusyFlag := True;
RMEnableControls([Label2, edtFieldAlias], FActiveNode.ImageIndex <> 0);
chkFieldNoSelect.Enabled := FActiveNode.ImageIndex in [Field_CanSelect, Field_CannotSelect];
chkFieldNoSelect.Checked := (FActiveNode <> treeFieldAliases.Items[0]) and
(FActiveNode.ImageIndex = Field_CannotSelect);
FBusyFlag := False;
end;
procedure TRMDictionaryForm.btnPackDictionaryClick(Sender: TObject);
begin
THackDictionary(CurReport.Dictionary).Pack1(FFieldAliases);
end;
procedure TRMDictionaryForm.btnClearDictionaryClick(Sender: TObject);
begin
THackDictionary(CurReport.Dictionary).Clear;
PageControl1.ActivePage := TabSheet1;
FormShow(nil);
end;
procedure TRMDictionaryForm.btnAddStyleClick(Sender: TObject);
var
lNode: TTreeNode;
lStyle: TRMTextStyle;
begin
lStyle := FStyles.Add;
lStyle.CreateUniqueName;
lNode := trvStyles.Items.Add(nil, lStyle.StyleName);
lNode.Data := lStyle;
lNode.ImageIndex := 6;
lNode.SelectedIndex := 6;
trvStyles.Selected := lNode;
trvStyles.Selected.EditText;
end;
procedure TRMDictionaryForm.btnDeleteStyleClick(Sender: TObject);
var
lNode: TTreeNode;
begin
lNode := trvStyles.Selected;
if lNode <> nil then
begin
TRMTextStyle(lNode.Data).Free;
trvStyles.Items.Delete(lNode);
end;
end;
procedure TRMDictionaryForm.btnEditStyleClick(Sender: TObject);
var
lNode: TTreeNode;
begin
lNode := trvStyles.Selected;
if lNode <> nil then
begin
lNode.EditText;
end;
end;
procedure TRMDictionaryForm.trvStylesEdited(Sender: TObject;
Node: TTreeNode; var S: String);
begin
TRMTextStyle(Node.Data).StyleName := s;
end;
procedure TRMDictionaryForm.trvStylesChange(Sender: TObject;
Node: TTreeNode);
var
lNode: TTreeNode;
begin
lNode := trvStyles.Selected;
if lNode <> nil then
begin
cmbHAlign.ItemIndex := Integer(TRMTextStyle(lNode.Data).HAlign);
cmbVAlign.ItemIndex := Integer(TRMTextStyle(lNode.Data).VAlign);
end;
PaintBox1.Repaint;
end;
procedure TRMDictionaryForm.Button1Click(Sender: TObject);
var
lFontDialog: TFontDialog;
begin
if trvStyles.Selected = nil then Exit;
lFontDialog := TFontDialog.Create(Application);
try
lFontDialog.Options := lFontDialog.Options + [fdTrueTypeOnly];
lFontDialog.Font := TRMTextStyle(trvStyles.Selected.Data).Font;
if lFontDialog.Execute then
begin
TRMTextStyle(trvStyles.Selected.Data).Font := lFontDialog.Font;
end;
finally
lFontDialog.Free;
PaintBox1.Repaint;
end;
end;
type
THackView = class(TRMMemoView);
procedure TRMDictionaryForm.PaintBox1Paint(Sender: TObject);
var
t: TRMMemoView;
begin
with PaintBox1.Canvas do
begin
Brush.Color := clWindow;
Pen.Color := clGray;
Pen.Width := 1;
Pen.Style := psSolid;
Rectangle(0, 0, PaintBox1.Width, PaintBox1.Height);
end;
if trvStyles.Selected = nil then Exit;
t := TRMMemoView.Create;
try
THackView(t).SetParentReport(CurReport);
THackView(t).DrawFocusedFrame := False;
THackView(t).ApplyStyle(TRMTextStyle(trvStyles.Selected.Data));
t.Memo.Text := RMLoadStr(rmRes + 278);
t.SetspBounds(1, 1, PaintBox1.Width - 2, PaintBox1.Height - 2);
t.Draw(PaintBox1.Canvas);
finally
t.Free;
end;
end;
procedure TRMDictionaryForm.cmbHAlignChange(Sender: TObject);
begin
if trvStyles.Selected = nil then Exit;
TRMTextStyle(trvStyles.Selected.Data).HAlign := TRMHAlign(cmbHAlign.ItemIndex);
TRMTextStyle(trvStyles.Selected.Data).VAlign := TRMVAlign(cmbVAlign.ItemIndex);
PaintBox1.Repaint;
end;
procedure TRMDictionaryForm.OnColorChangeEvent(Sender: TObject);
begin
if trvStyles.Selected = nil then Exit;
TRMTextStyle(trvStyles.Selected.Data).FillColor := FBtnFillColor.CurrentColor;
PaintBox1.Repaint;
end;
procedure TRMDictionaryForm.Button2Click(Sender: TObject);
var
lTmp: TRMDisplayFormatForm;
begin
if trvStyles.Selected = nil then Exit;
lTmp := TRMDisplayFormatForm.Create(nil);
try
lTmp.DisplayFormat := TRMTextStyle(trvStyles.Selected.Data).DisplayFormat;
if lTmp.ShowModal = mrOK then
begin
TRMTextStyle(trvStyles.Selected.Data).DisplayFormat := lTmp.DisplayFormat;
end;
finally
lTmp.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -