📄 rm_editordictionary.pas
字号:
if not FindCategory(' ' + Result) then
break;
end;
end;
begin
TreeNode := treeVariables.Selected;
if treeVariables.ShowRoot = False then
begin
TreeNode.Delete;
TreeNode := nil;
treeVariables.ShowRoot := True;
end;
if TreeNode <> nil then
TreeNode := treeVariables.Items[0];
s := CreateNewCategory;
FVariables[' ' + s] := '';
ANode := treeVariables.Items.Add(TreeNode, s);
ANode.ImageIndex := 5;
ANode.SelectedIndex := 5;
treeVariables.Selected := ANode;
ANode.EditText;
end;
procedure TRMDictionaryForm.btnNewVarClick(Sender: TObject);
var
ANode, TreeNode: TTreeNode;
s: string;
function CreateNewVariable: string;
var
i: Integer;
function FindVariable(s: string): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to FVariables.Count - 1 do
begin
if AnsiCompareText(FVariables.Name[i], s) = 0 then
begin
Result := True;
break;
end;
end;
end;
begin
for i := 1 to 10000 do
begin
Result := 'Variable' + IntToStr(i);
if not FindVariable(Result) then
break;
end;
end;
begin
TreeNode := treeVariables.Selected;
if (TreeNode = nil) or not treeVariables.ShowRoot then Exit;
if TreeNode.Parent <> nil then
TreeNode := TreeNode.Parent;
s := CreateNewVariable;
if TreeNode.GetNextSibling <> nil then
FVariables.Insert(FVariables.IndexOf(' ' + TreeNode.GetNextSibling.Text), s,'')
else
FVariables[s] := '';
ANode := treeVariables.Items.AddChild(TreeNode, s);
ANode.ImageIndex := 6;
ANode.SelectedIndex := 6;
TreeNode.Expand(True);
treeVariables.Selected := ANode;
ANode.EditText;
end;
procedure TRMDictionaryForm.btnEditClick(Sender: TObject);
var
TreeNode: TTreeNode;
begin
TreeNode := treeVariables.Selected;
if (TreeNode <> nil) and treeVariables.ShowRoot then
TreeNode.EditText;
end;
procedure TRMDictionaryForm.btnDelClick(Sender: TObject);
var
TreeNode: TTreeNode;
i: integer;
begin
TreeNode := treeVariables.Selected;
if (TreeNode <> nil) and treeVariables.ShowRoot then
begin
if TreeNode.ImageIndex = 5 then
begin
i := FVariables.IndexOf(' ' + TreeNode.Text);
FVariables.Delete(i);
while (i < FVariables.Count) and (FVariables.Name[i][1] <> ' ') do
FVariables.Delete(i);
end
else
FVariables.Delete(FVariables.IndexOf(TreeNode.Text));
TreeNode.Delete;
if treeVariables.Items.Count = 0 then
begin
TreeNode := treeVariables.Items.Add(treeVariables.Selected, RMLoadStr(SNotAssigned));
TreeNode.ImageIndex := -1;
TreeNode.SelectedIndex := -1;
treeVariables.ShowRoot := False;
treeVariables.Selected := treeVariables.Items[0];
end;
end;
end;
procedure TRMDictionaryForm.treeVariablesKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Insert then
begin
if ssCtrl in Shift then
btnNewCategoryClick(nil)
else if (treeVariables.Selected = nil) or (treeVariables.ShowRoot = False) then
btnNewCategory.Click
else
btnNewVar.Click;
end
else if (Key = vk_Delete) and not treeVariables.IsEditing then
btnDel.Click
else if Key = vk_Return then
btnEdit.Click
else if (Key = vk_Escape) and not treeVariables.IsEditing then
btnCancel.Click;
end;
procedure TRMDictionaryForm.treeVariablesEdited(Sender: TObject; Node: TTreeNode; var S: string);
var
s1: string;
begin
if Node.ImageIndex = 6 then
s1 := s
else
s1 := ' ' + s;
if (AnsiCompareText(s, Node.Text) <> 0) and (FVariables.IndexOf(s1) <> -1) then
s := Node.Text
else
begin
if Node.ImageIndex = 6 then
FVariables.Name[FVariables.IndexOf(Node.Text)] := s1
else
FVariables.Name[FVariables.IndexOf(' ' + Node.Text)] := s1;
end;
end;
procedure TRMDictionaryForm.edtExpressionKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
treeVariables.SetFocus;
end;
procedure TRMDictionaryForm.btnExpressionClick(Sender: TObject);
var
expr: string;
begin
expr := edtExpression.Text;
if RMGetExpression('', expr, nil, False) then
begin
edtExpression.Text := expr;
edtExpression.SetFocus;
edtExpression.Modified := True;
end;
end;
procedure TRMDictionaryForm.lstFieldsClick(Sender: TObject);
var
liNode: TTreeNode;
liValue: string;
begin
if edtExpression.Modified then
edtExpressionExit(nil);
liNode := treeVariables.Selected;
if (liNode = nil) or (liNode.ImageIndex <> 6) then Exit;
if lstFields.ItemIndex <= 0 then
liValue := ''
else
liValue := cmbDataSets.Text + '."' + lstFields.Items[lstFields.ItemIndex] + '"';
FVariables[liNode.Text] := liValue;
end;
procedure TRMDictionaryForm.ShowValue(aValue: string);
var
i, n: Integer;
s1, s2: string;
Found: Boolean;
function FindStr(aList: TStrings; aStr: string; aIsField: Boolean): Integer;
var
i: Integer;
lStr: string;
begin
Result := -1;
for i := 0 to aList.Count - 1 do
begin
if aIsField then
lStr := CurReport.Dictionary.RealFieldName[nil, aList[i]]
else
lStr := CurReport.Dictionary.RealDataSetName[aList[i]];
if AnsiCompareText(lStr, aStr) = 0 then
begin
Result := i;
Break;
end;
end;
end;
begin
s1 := '';
s2 := '';
Found := False;
if Pos('.', aValue) <> 0 then
begin
for i := Length(aValue) downto 1 do
begin
if aValue[i] = '.' then
begin
s1 := Copy(aValue, 1, i - 1);
s2 := Copy(aValue, i + 1, 255);
break;
end;
end;
n := FindStr(cmbDataSets.Items, s1, FALSE);
if n <> -1 then
begin
if cmbDataSets.ItemIndex <> n then
begin
cmbDataSets.ItemIndex := n;
cmbDataSetsClick(nil);
end;
if (s2 <> '') and (s2[1] = '"') then
s2 := Copy(s2, 2, Length(s2) - 2);
n := FindStr(lstFields.Items, s2, TRUE);
if n <> -1 then
begin
lstFields.ItemIndex := n;
Found := True;
end;
end;
end;
if not Found then
begin
if Trim(aValue) = '' then
begin
lstFields.ItemIndex := 0;
edtExpression.Text := '';
end;
edtExpression.Text := aValue;
lstFields.ItemIndex := 0;
end
else
begin
edtExpression.Text := '';
end;
end;
procedure TRMDictionaryForm.treeVariablesChange(Sender: TObject; Node: TTreeNode);
var
lVariableName: string;
begin
if edtExpression.Modified then
edtExpressionExit(nil);
RMEnableControls([edtExpression, btnExpression], (Node <> nil) and (Node.ImageIndex = Variable_Variable));
lVariableName := '';
if (Node <> nil) and (Node.ImageIndex = Variable_Category) then
lVariableName := ' ' + Node.Text
else if (Node <> nil) and (Node.ImageIndex = Variable_Variable) then
lVariableName := Node.Text;
if lVariableName <> '' then
ShowValue(FVariables[lVariableName]);
end;
procedure TRMDictionaryForm.lstAllDataSetsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
s: string;
liBmp: TBitmap;
liCanvas: TCanvas;
begin
liBmp := TBitmap.Create;
liCanvas := nil;
try
if Control = lstAllDataSets then
begin
liCanvas := lstAllDataSets.Canvas;
s := lstAllDataSets.Items[Index];
ImageList1.GetBitmap(Dataset_INDEX, liBmp);
end
else if Control = cmbDataSets then
begin
liCanvas := cmbDataSets.Canvas;
s := cmbDataSets.Items[Index];
ImageList1.GetBitmap(Dataset_INDEX, liBmp);
end
else if Control = lstFields then
begin
liCanvas := lstFields.Canvas;
s := lstFields.Items[Index];
ImageList1.GetBitmap(Field_INDEX, liBmp);
end;
if liCanvas <> nil then
begin
liCanvas.FillRect(Rect);
liCanvas.BrushCopy(Bounds(Rect.Left + 2, Rect.Top, liBmp.Width, liBmp.Height),
liBmp, Bounds(0, 0, liBmp.Width, liBmp.Height), liBmp.TransparentColor);
liCanvas.TextOut(Rect.Left + 4 + liBmp.Width, Rect.Top, s);
end;
finally
liBmp.Free;
end;
end;
function GetItemName(const s: string): string;
var
liPos: Integer;
begin
liPos := Pos('{', s);
if liPos > 0 then
Result := Trim(Copy(s, 1, liPos - 1))
else
Result := s;
end;
procedure TRMDictionaryForm.AddFieldAlias(const aDataSet: string);
var
liNode: TTreeNode;
begin
if aDataSet <> '' then
begin
treeFieldAliases.Items.AddChild(treeFieldAliases.Items[0], aDataSet);
liNode := treeFieldAliases.Items[0].GetLastChild;
liNode.ImageIndex := Dataset_INDEX;
liNode.SelectedIndex := Dataset_INDEX;
treeFieldAliases.Items.AddChild(liNode, RMLoadStr(SNotAssigned));
FFieldAliases[aDataSet] := '';
end;
btnFieldDeleteAll.Enabled := treeFieldAliases.Items.Count > 1;
end;
procedure TRMDictionaryForm.btnFieldAddOneClick(Sender: TObject);
var
i: Integer;
begin
i := 0;
while i < lstAllDataSets.Items.Count do
begin
if lstAllDataSets.Selected[i] then
begin
AddFieldAlias(lstAllDataSets.Items[i]);
lstAllDataSets.Items.Delete(i);
end
else
Inc(i);
end;
treeFieldAliases.Items[0].Expand(False);
treeFieldAliases.Selected := treeFieldAliases.Items[0];
end;
procedure TRMDictionaryForm.btnFieldDeleteOneClick(Sender: TObject);
var
lNode: TTreeNode;
lFlag: Boolean;
s: string;
procedure _DeleteFieldAlias(aNode: TTreeNode);
var
i, n: Integer;
s, lItemName: string;
begin
lItemName := GetItemName(aNode.Text);
for i := 0 to aNode.Count - 1 do
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -