📄 fr_dict.pas
字号:
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 + -