⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rm_editordictionary.pas

📁 这是一个功能强大
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      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 + -