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

📄 fr_dict.pas

📁 FASTREPORT报表工具,可以迅速制作报表.
💻 PAS
📖 第 1 页 / 共 3 页
字号:
procedure TfrDictForm.FieldAliasesTreeChange(Sender: TObject; Node: TTreeNode);
begin
  FieldAliasesTreeClick(nil);
end;

procedure TfrDictForm.AllTablesLBDrawItem(Control: TWinControl;
  Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
  r: TRect;
begin
  r := ARect;
  r.Right := r.Left + 18;
  r.Bottom := r.Top + 15;
  OffsetRect(r, 2, 0);
  with AllTablesLB.Canvas do
  begin
    FillRect(ARect);
    BrushCopy(r, Image1.Picture.Bitmap, Rect(0, 0, 18, 15),
      Image1.Picture.Bitmap.TransparentColor);
    TextOut(ARect.Left + 20, ARect.Top + 1, AllTablesLB.Items[Index]);
  end;
end;

procedure TfrDictForm.frSpeedButton1Click(Sender: TObject);
var
  i, n: Integer;
  s: String;
begin
  n := AllTablesLB.ItemIndex;
  i := 0;
  while i < AllTablesLB.Items.Count do
  begin
    if AllTablesLB.Selected[i] then
    begin
      s := AllTablesLB.Items[i];
      AddFieldAlias(s);
      FieldAliases[s] := '';
      AllTablesLB.Items.Delete(i);
    end
    else
      Inc(i);
  end;

  FieldAliasesTree.Items[0].Expand(False);
  FieldAliasesTree.Selected := FieldAliasesTree.Items[0];
  if n >= AllTablesLB.Items.Count then
    Dec(n);
  if n < AllTablesLB.Items.Count then
    AllTablesLB.Selected[n] := True;
end;

procedure TfrDictForm.frSpeedButton2Click(Sender: TObject);
var
  TreeNode: TTreeNode;
  s: String;
begin
  TreeNode := FieldAliasesTree.Selected;
  if (TreeNode = nil) or (TreeNode.ImageIndex <> 1) then Exit;

  s := GetItemName(TreeNode.Text);
  DeleteFieldAlias(TreeNode);
  AllTablesLB.Items.Add(s);
  TreeNode.Delete;
  FieldAliases.Delete(FieldAliases.IndexOf(s));
end;

procedure TfrDictForm.frSpeedButton3Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to AllTablesLB.Items.Count - 1 do
  begin
    AddFieldAlias(AllTablesLB.Items[i]);
    FieldAliases[AllTablesLB.Items[i]] := '';
  end;
  AllTablesLB.Items.Clear;
  FieldAliasesTree.Items[0].Expand(False);
  FieldAliasesTree.Selected := FieldAliasesTree.Items[0];
end;

procedure TfrDictForm.frSpeedButton4Click(Sender: TObject);
var
  i: Integer;
  TreeNode: TTreeNode;
begin
  for i := 0 to FieldAliases.Count - 1 do
    if Pos('"', FieldAliases.Name[i]) = 0 then
      AllTablesLB.Items.Add(FieldAliases.Name[i]);

  FieldAliases.Clear;
  TreeNode := FieldAliasesTree.Items[0];
  TreeNode.DeleteChildren;
end;

procedure TfrDictForm.FieldAliasesTreeDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListBox;
end;

procedure TfrDictForm.FieldAliasesTreeDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  frSpeedButton1Click(nil);
end;

procedure TfrDictForm.AllTablesLBDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TTreeView;
end;

procedure TfrDictForm.AllTablesLBDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  frSpeedButton2Click(nil);
end;

procedure TfrDictForm.AllTablesLBDblClick(Sender: TObject);
begin
  frSpeedButton1Click(nil);
end;


{ Band Datasources }

procedure TfrDictForm.AddBandDS(DSName: String);
var
  TreeNode: TTreeNode;
begin
  if DSName <> '' then
  begin
    BandDSTree.Items.AddChild(BandDSTree.Items[0], DSName);
    TreeNode := BandDSTree.Items[0].GetLastChild;
    TreeNode.ImageIndex := 7;
    TreeNode.SelectedIndex := 7;
  end;
end;

procedure TfrDictForm.FillBandDataSources;
var
  i, n: Integer;
  TreeNode: TTreeNode;
  sl: TStringList;
  s: String;
begin
  BandDataSources.Assign(Doc.Dictionary.BandDataSources);

  TreeNode := BandDSTree.Items[0];
  TreeNode.Text := frLoadStr(frRes + 357);
  TreeNode.DeleteChildren;
  CurReport := Doc;

  sl := TStringList.Create;
  frGetComponents(Doc.Owner, TfrDataSet, sl, nil);
  sl.Sort;

  AllBandsLB.Items.Assign(sl);

  for i := 0 to sl.Count - 1 do
  begin
    s := sl[i];
    n := BandDatasources.IndexOf(sl[i]);
    if (BandDataSources.Count = 0) or (n = -1) then
      s := ''
    else if BandDatasources.Value[n] <> '' then
      s := s + ' {' + BandDatasources.Value[n] + '}';

    AddBandDS(s);
    if s <> '' then
      AllBandsLB.Items.Delete(AllBandsLB.Items.IndexOf(sl[i]));
  end;

  BandDSTree.FullExpand;
  BandDSTree.Selected := BandDSTree.Items[0];
  sl.Free;
end;

procedure TfrDictForm.BandDSTreeKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = vk_Return then
    Edit2.SetFocus
end;

procedure TfrDictForm.BandDSTreeClick(Sender: TObject);
var
  TreeNode: TTreeNode;
  s: String;
begin
  if Edit2.Modified then Edit2Exit(nil);
  TreeNode := BandDSTree.Selected;
  if TreeNode <> BandDSTree.Items[0] then
  begin
    s := TreeNode.Text;
    if Pos('{', s) <> 0 then
      s := Copy(s, Pos('{', s) + 1, Pos('}', s) - Pos('{', s) - 1);
    Edit2.Text := s;
  end
  else
    Edit2.Text := '';
  ActiveNode := TreeNode;
end;

procedure TfrDictForm.BandDSTreeChange(Sender: TObject; Node: TTreeNode);
begin
  BandDSTreeClick(nil);
end;

procedure TfrDictForm.Edit2Exit(Sender: TObject);
var
  s, ItemName: String;
begin
  if Edit2.Modified then
    if ActiveNode <> BandDSTree.Items[0] then
    begin
      s := ActiveNode.Text;
      ItemName := GetItemName(s);
      if Pos('{', s) <> 0 then
        s := Copy(s, 1, Pos('{', s) - 1) else
        s := s + ' ';
      ActiveNode.Text := s + '{' + Edit2.Text + '}';
      BandDataSources[ItemName] := Edit2.Text;
    end;
  Edit2.Modified := False;
end;

procedure TfrDictForm.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    BandDSTree.SetFocus;
end;

procedure TfrDictForm.AllBandsLBDrawItem(Control: TWinControl;
  Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
  r: TRect;
begin
  r := ARect;
  r.Right := r.Left + 18;
  r.Bottom := r.Top + 15;
  OffsetRect(r, 2, 0);
  with AllBandsLB.Canvas do
  begin
    FillRect(ARect);
    BrushCopy(r, Image4.Picture.Bitmap, Rect(0, 0, 18, 15),
      Image4.Picture.Bitmap.TransparentColor);
    TextOut(ARect.Left + 20, ARect.Top + 1, AllBandsLB.Items[Index]);
  end;
end;

procedure TfrDictForm.frSpeedButton5Click(Sender: TObject);
var
  i, n: Integer;
  s: String;
begin
  n := AllBandsLB.ItemIndex;
  i := 0;
  while i < AllBandsLB.Items.Count do
  begin
    if AllBandsLB.Selected[i] then
    begin
      s := AllBandsLB.Items[i];
      AddBandDS(s);
      BandDataSources[s] := '';
      AllBandsLB.Items.Delete(i);
    end
    else
      Inc(i);
  end;

  BandDSTree.Items[0].Expand(False);
  BandDSTree.Selected := BandDSTree.Items[0];
  if n >= AllBandsLB.Items.Count then
    Dec(n);
  if n < AllBandsLB.Items.Count then
    AllBandsLB.Selected[n] := True;
end;

procedure TfrDictForm.frSpeedButton6Click(Sender: TObject);
var
  TreeNode: TTreeNode;
  s: String;
begin
  TreeNode := BandDSTree.Selected;
  if (TreeNode = nil) or (TreeNode.ImageIndex <> 7) then Exit;

  s := GetItemName(TreeNode.Text);
  AllBandsLB.Items.Add(s);
  TreeNode.Delete;
  BandDataSources.Delete(BandDataSources.IndexOf(s));
end;

procedure TfrDictForm.frSpeedButton7Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to AllBandsLB.Items.Count - 1 do
  begin
    AddBandDS(AllBandsLB.Items[i]);
    BandDataSources[AllBandsLB.Items[i]] := '';
  end;
  AllBandsLB.Items.Clear;
  BandDSTree.Items[0].Expand(False);
  BandDSTree.Selected := BandDSTree.Items[0];
end;

procedure TfrDictForm.frSpeedButton8Click(Sender: TObject);
var
  i: Integer;
  TreeNode: TTreeNode;
begin
  for i := 0 to BandDataSources.Count - 1 do
    AllBandsLB.Items.Add(BandDataSources.Name[i]);

  BandDataSources.Clear;
  TreeNode := BandDSTree.Items[0];
  TreeNode.DeleteChildren;
end;

procedure TfrDictForm.BandDSTreeDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListBox;
end;

procedure TfrDictForm.BandDSTreeDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  frSpeedButton5Click(nil);
end;

procedure TfrDictForm.AllBandsLBDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TTreeView;
end;

procedure TfrDictForm.AllBandsLBDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  frSpeedButton6Click(nil);
end;

procedure TfrDictForm.AllBandsLBDblClick(Sender: TObject);
begin
  frSpeedButton5Click(nil);
end;


{ Variables }

procedure TfrDictForm.FillVariables(FirstTime: Boolean);
var
  i: Integer;
  ANode, TreeNode: TTreeNode;
  s: String;
begin
  Busy := True;
  if VarTree.Items.Count > 0 then
    VarTree.Items.Clear;
  if FirstTime then
    Variables.Assign(Doc.Dictionary.Variables);

  if Variables.Count = 0 then
  begin
    TreeNode := VarTree.Items.Add(VarTree.Selected, frLoadStr(SNotAssigned));
    TreeNode.ImageIndex := -1;
    TreeNode.SelectedIndex := -1;
    VarTree.ShowRoot := False;
    ExprCB.Enabled := False;
  end
  else
  begin
    TreeNode := nil;
    for i := 0 to Variables.Count - 1 do
    begin
      s := Variables.Name[i];
      if (s <> '') and (s[1] = ' ') then
      begin
        TreeNode := VarTree.Items.Add(nil, Copy(s, 2, 255));
        TreeNode.ImageIndex := 5;
        TreeNode.SelectedIndex := 5;
      end
      else if TreeNode <> nil then
      begin
        ANode := VarTree.Items.AddChild(TreeNode, s);
        ANode.ImageIndex := 6;
        ANode.SelectedIndex := 6;
      end;
    end;
  end;
  Busy := False;
  VarTree.FullExpand;
  VarTree.Items[0].Selected := True;
end;

procedure TfrDictForm.NewCategoryBtnClick(Sender: TObject);
var
  ANode, TreeNode: TTreeNode;
  s: String;

  function CreateNewCategory: String;
  var
    i: Integer;

    function FindCategory(s: String): Boolean;
    var
      i: Integer;
    begin
      Result := False;
      for i := 0 to Variables.Count - 1 do
      begin
        if AnsiCompareText(Variables.Name[i], s) = 0 then
        begin
          Result := True;
          break;
        end;
      end;
    end;

  begin
    for i := 1 to 1000 do
    begin
      Result := 'Category' + IntToStr(i);
      if not FindCategory(' ' + Result) then
        break;
    end;
  end;

begin
  TreeNode := VarTree.Selected;
  if VarTree.ShowRoot = False then
  begin
    TreeNode.Delete;
    TreeNode := nil;
    VarTree.ShowRoot := True;
    ExprCB.Enabled := True;
  end;
  if TreeNode <> nil then
    TreeNode := VarTree.Items[0];

  s := CreateNewCategory;
  Variables[' ' + s] := '';
  ANode := VarTree.Items.Add(TreeNode, s);
  ANode.ImageIndex := 5;
  ANode.SelectedIndex := 5;
  VarTree.Selected := ANode;
  ANode.EditText;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -