cxeditmaskeditor.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 969 行 · 第 1/2 页
PAS
969 行
begin
if not ((AStringNumber = 0) and (AShortDescription = '')) then
raise EcxLoadMaskException.Create(cxGetResourceString(@scxMaskEditIllegalFileFormat));
end;
end
else if AToken = '|' then
begin
if AStringNumber >= 2 then
raise EcxLoadMaskException.Create(cxGetResourceString(@scxMaskEditIllegalFileFormat))
else
Inc(AStringNumber);
end
else
begin
if AToken <> #13 then
begin
case AStringNumber of
0: AShortDescription := AShortDescription + AToken;
1: ADescription := ADescription + AToken;
2: AMask := AMask + AToken;
end;
end;
end;
end;
if (AShortDescription <> '') or (ADescription <> '') or (AMask <> '') then
AddSample;
if Length(ASamples) > 0 then
begin
FreeStandardSamples;
StandardSamples := ASamples;
ShowStandardSamples;
cxTextEdit1.Text := '';
cxMaskEdit2.Properties.EditMask := '';
cxCheckBox1.Checked := True;
end
else
raise EcxLoadMaskException.Create(cxGetResourceString(@scxMaskEditEmptyMaskCollectionFile));
finally
AMemoryStream.Free;
end;
end;
procedure TcxEditMaskEditorDlg.LoadMaskDxm(AFileName: string);
var
AStandardSamples: TcxSamples;
ARegExprSamples: TcxSamples;
AShortDescription: string;
ADescription: string;
AMask: string;
procedure NewSample(var ASamples: TcxSamples);
begin
SetLength(ASamples, Length(ASamples) + 1);
ASamples[Length(ASamples) - 1].ShortDescription := AShortDescription;
ASamples[Length(ASamples) - 1].Description := ADescription;
ASamples[Length(ASamples) - 1].Mask := AMask;
end;
procedure ClearValues;
begin
AShortDescription := '';
ADescription := '';
AMask := '';
end;
procedure AddStandardSample;
begin
NewSample(AStandardSamples);
ClearValues;
end;
procedure AddRegExprSample;
begin
NewSample(ARegExprSamples);
ClearValues;
end;
var
AFile: TMemIniFile;
ASections: TStringList;
AKeys: TStringList;
I: Integer;
begin
AFile := TMemIniFile.Create(AFileName);
ASections := TStringList.Create;
AKeys := TStringList.Create;
try
AFile.ReadSections(ASections);
for I := 0 to ASections.Count - 1 do
begin
AFile.ReadSection(ASections[I], AKeys);
if AKeys.Count > 3 then
raise EcxLoadMaskException.Create(cxGetResourceString(@scxMaskEditIllegalFileFormat))
else
begin
AShortDescription := AFile.ReadString(ASections[I], 'ShortDescription', '');
ADescription := AFile.ReadString(ASections[I], 'Description', '');
AMask := AFile.ReadString(ASections[I], 'Mask', '');
if (AShortDescription = '') and (ADescription = '') and (AMask = '') then
Continue;
if Pos('Standard', ASections[I]) <> 0 then
AddStandardSample
else if Pos('RegExpr', ASections[I]) <> 0 then
AddRegExprSample
else
raise EcxLoadMaskException.Create(cxGetResourceString(@scxMaskEditIllegalFileFormat));
end;
end;
if (Length(AStandardSamples) = 0) and (Length(ARegExprSamples) = 0) then
raise EcxLoadMaskException.Create(cxGetResourceString(@scxMaskEditEmptyMaskCollectionFile));
FreeStandardSamples;
StandardSamples := AStandardSamples;
ShowStandardSamples;
cxTextEdit1.Text := '';
cxMaskEdit2.Properties.EditMask := '';
cxCheckBox1.Checked := True;
FreeRegExprSamples;
RegExprSamples := ARegExprSamples;
ShowRegExprSamples;
cxEditMaskEdit.Text := '';
cxMaskEdit1.Properties.EditMask := '';
finally
AFile.Free;
AKeys.Free;
ASections.Free;
end;
end;
procedure TcxEditMaskEditorDlg.OpenMask;
var
ADialog: TOpenDialog;
AExt: string;
begin
ADialog := TOpenDialog.Create(nil);
ADialog.Options := [];
ADialog.Filter := cxGetResourceString(@scxMaskEditMaskCollectionFiles) + ' (*.dem, *.dxm )|*.dem;*.dxm';
try
if ADialog.Execute then
begin
AExt := ExtractFileExt(ADialog.Files[0]);
if LowerCase(AExt) = '.dem' then
LoadMaskDem(ADialog.Files[0])
else if LowerCase(AExt) = '.dxm' then
LoadMaskDxm(ADialog.Files[0]);
end;
finally
ADialog.Free;
end;
end;
procedure TcxEditMaskEditorDlg.ShowRegExprSamples;
var
I: Integer;
begin
ListBox1.Items.Clear;
if RegExprSamples = nil then
begin
for I := 0 to DefaultRegExprSamplesCount - 1 do
ListBox1.Items.Add(DefaultRegExprSamples[I].ShortDescription);
end
else
begin
for I := 0 to Length(RegExprSamples) - 1 do
ListBox1.Items.Add(RegExprSamples[I].ShortDescription);
end;
end;
procedure TcxEditMaskEditorDlg.ShowStandardSamples;
var
I: Integer;
AItem: TListItem;
begin
ListView1.Items.Clear;
if StandardSamples = nil then
begin
for I := 0 to DefaultStandardSamplesCount - 1 do
begin
AItem := ListView1.Items.Add;
AItem.Caption := DefaultStandardSamples[I].ShortDescription;
AItem.SubItems.Add(DefaultStandardSamples[I].Description);
end;
end
else
begin
for I := 0 to Length(StandardSamples) - 1 do
begin
AItem := ListView1.Items.Add;
AItem.Caption := StandardSamples[I].ShortDescription;
AItem.SubItems.Add(StandardSamples[I].Description);
end;
end;
end;
procedure TcxEditMaskEditorDlg.ListBox1Click(Sender: TObject);
begin
Memo1.Clear;
if RegExprSamples = nil then
begin
Memo1.Lines.Add(DefaultRegExprSamples[ListBox1.ItemIndex].Description);
cxEditMaskEdit.Text := DefaultRegExprSamples[ListBox1.ItemIndex].Mask;
end
else
begin
Memo1.Lines.Add(RegExprSamples[ListBox1.ItemIndex].Description);
cxEditMaskEdit.Text := RegExprSamples[ListBox1.ItemIndex].Mask;
end;
try
cxMaskEdit1.Properties.EditMask := cxEditMaskEdit.Text;
cxMaskEdit1.Enabled := True;
except
on EcxMaskEditError do
begin
cxMaskEdit1.Properties.EditMask := '';
cxMaskEdit1.Text := '';
cxMaskEdit1.Enabled := False;
raise;
end;
end;
end;
procedure TcxEditMaskEditorDlg.ListBox1Exit(Sender: TObject);
begin
if ListBox1.ItemIndex <> FLastItemIndex then
begin
cxMaskEdit1.Text := '';
FLastItemIndex := ListBox1.ItemIndex;
end;
end;
procedure TcxEditMaskEditorDlg.OKButtonClick(Sender: TObject);
begin
if cxMaskKindPickEdit1.ItemIndex = Integer(emkStandard) then
begin
CorrectMaskBlank;
cxMaskEdit2.Properties.EditMask := '';
cxMaskEdit2.Text := '';
cxMaskEdit2.Properties.EditMask := cxTextEdit1.Text;
TcxCustomMaskEditPropertiesAccess(MaskEditProperties).MaskKind :=
emkStandard;
TcxCustomMaskEditPropertiesAccess(MaskEditProperties).EditMask :=
cxMaskEdit2.Properties.EditMask;
ModalResult := mrOk;
end
else
try
cxMaskEdit1.Properties.EditMask := cxEditMaskEdit.Text;
cxMaskEdit1.Enabled := True;
TcxCustomMaskEditPropertiesAccess(MaskEditProperties).MaskKind :=
TcxEditMaskKind(cxMaskKindPickEdit1.ItemIndex);
TcxCustomMaskEditPropertiesAccess(MaskEditProperties).EditMask :=
cxMaskEdit1.Properties.EditMask;
ModalResult := mrOk;
except
on EcxMaskEditError do
begin
cxMaskEdit1.Properties.EditMask := '';
cxMaskEdit1.Text := '';
cxMaskEdit1.Enabled := False;
cxEditMaskEdit.SetFocus;
raise;
end;
end;
end;
procedure TcxEditMaskEditorDlg.CancelButtonClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TcxEditMaskEditorDlg.ListView1SelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
if Selected then
begin
if StandardSamples = nil then
cxTextEdit1.Text := DefaultStandardSamples[ListView1.Selected.Index].Mask
else
cxTextEdit1.Text := StandardSamples[ListView1.Selected.Index].Mask;
CorrectMaskBlank;
cxMaskEdit2.Properties.EditMask := '';
cxMaskEdit2.Text := '';
cxMaskEdit2.Properties.EditMask := cxTextEdit1.Text;
cxCheckBox1.Checked := GetSaveLiteralChars(cxTextEdit1.Text);
end;
end;
procedure TcxEditMaskEditorDlg.cxTextEdit1Exit(Sender: TObject);
begin
begin
CorrectMaskBlank;
cxMaskEdit2.Properties.EditMask := '';
cxMaskEdit2.Text := '';
cxMaskEdit2.Properties.EditMask := cxTextEdit1.Text;
cxCheckBox1.Checked := GetSaveLiteralChars(cxTextEdit1.Text);
end;
end;
procedure TcxEditMaskEditorDlg.cxTextEdit1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if TranslateKey(Key) = VK_RETURN then
begin
CorrectMaskBlank;
cxMaskEdit2.Properties.EditMask := '';
cxMaskEdit2.Text := '';
cxMaskEdit2.Properties.EditMask := cxTextEdit1.Text;
cxCheckBox1.Checked := GetSaveLiteralChars(cxTextEdit1.Text);
end;
end;
procedure TcxEditMaskEditorDlg.FormatStandardMask(var AMask: string; ANewMaskBlank: Char);
var
AOldMaskBlank: Char;
ASaveLiteralChars: Boolean;
AMaskLength: Integer;
begin
AOldMaskBlank := MaskBlank(AMask);
ASaveLiteralChars := SaveLiteralChars(AMask);
if AOldMaskBlank <> ANewMaskBlank then
begin
AMaskLength := Length(AMask);
if AMaskLength < 4 then
begin
if (AMaskLength = 2) and (AMask[1] = ';') and ((AMask[2] = '0') or (AMask[2] = '1')) then
AMask := AMask + ';' + ANewMaskBlank
else
AMask := AMask + ';' + GetSaveLiteralChartSymbol(ASaveLiteralChars) + ';' + ANewMaskBlank;
end
else
begin
if (AMask[AMaskLength - 1] = ';') and (AMask[AMaskLength - 3] = ';') and
((AMask[AMaskLength - 2] = '0') or (AMask[AMaskLength - 2] = '1')) then
begin
Delete(AMask, AMaskLength,1);
AMask := AMask + ANewMaskBlank;
end
else if (AMask[AMaskLength - 1] = ';') and ((AMask[AMaskLength] = '0') or (AMask[AMaskLength] = '1')) then
AMask := AMask + ';' + ANewMaskBlank
else
AMask := AMask + ';' + GetSaveLiteralChartSymbol(ASaveLiteralChars) + ';' + ANewMaskBlank;
end;
end;
end;
procedure TcxEditMaskEditorDlg.FormatStandardMask(var AMask: string; ANewSaveLiteralChars: Boolean);
var
AMaskLength: Integer;
AMaskBlank: Char;
begin
AMaskLength := Length(AMask);
AMaskBlank := MaskBlank(AMask);
if ANewSaveLiteralChars <> SaveLiteralChars(AMask) then
begin
if AMaskLength < 4 then
begin
if (AMaskLength = 2) and (AMask[1] = ';') and ((AMask[2] = '0') or (AMask[2] = '1')) then
begin
Delete(AMask, AMaskLength, 1);
AMask := AMask + GetSaveLiteralChartSymbol(ANewSaveLiteralChars);
end
else
AMask := AMask + ';' + GetSaveLiteralChartSymbol(ANewSaveLiteralChars) + ';' + AMaskBlank;
end
else
begin
if (AMask[AMaskLength - 1] = ';') and (AMask[AMaskLength - 3] = ';') and
((AMask[AMaskLength - 2] = '0') or (AMask[AMaskLength - 2] = '1')) then
begin
Delete(AMask, AMaskLength - 2, 1);
Insert(GetSaveLiteralChartSymbol(ANewSaveLiteralChars), AMask, AMaskLength - 2);
end
else if (AMask[AMaskLength - 1] = ';') and ((AMask[AMaskLength] = '0') or (AMask[AMaskLength] = '1')) then
begin
Delete(AMask, AMaskLength, 1);
AMask := AMask + GetSaveLiteralChartSymbol(ANewSaveLiteralChars);
end
else
AMask := AMask + ';' + GetSaveLiteralChartSymbol(ANewSaveLiteralChars) + ';' + AMaskBlank;
end;
end;
end;
procedure TcxEditMaskEditorDlg.cxTextEdit2Exit(Sender: TObject);
begin
ConvertMaskBlank;
end;
procedure TcxEditMaskEditorDlg.ConvertMaskBlank;
begin
if Length(cxTextEdit2.Text) > 0 then
begin
if string(cxTextEdit2.Text)[1] < #32 then
cxTextEdit2.Text := '_';
end
else
cxTextEdit2.Text := '_';
end;
procedure TcxEditMaskEditorDlg.cxTextEdit2PropertiesChange(
Sender: TObject);
var
AMask: string;
begin
ConvertMaskBlank;
AMask := cxTextEdit1.Text;
FormatStandardMask(AMask, string(cxTextEdit2.Text)[1]);
cxTextEdit1.Text := AMask;
cxMaskEdit2.Properties.EditMask := AMask;
cxCheckBox1.Checked := GetSaveLiteralChars(AMask);
end;
procedure TcxEditMaskEditorDlg.CorrectMaskBlank;
var
AMask: string;
begin
AMask := cxTextEdit1.Text;
cxTextEdit2.Text := MaskBlank(AMask);
if Length(cxTextEdit2.Text) > 0 then
FormatStandardMask(AMask, string(cxTextEdit2.Text)[1])
else
begin
FormatStandardMask(AMask, '_');
cxTextEdit2.Text := '_';
end;
cxTextEdit1.Text := AMask;
end;
procedure TcxEditMaskEditorDlg.MasksButtonClick(Sender: TObject);
begin
OpenMask;
end;
procedure TcxEditMaskEditorDlg.cxMaskEdit1Enter(Sender: TObject);
begin
try
cxMaskEdit1.Properties.EditMask := cxEditMaskEdit.Text;
cxMaskEdit1.Enabled := True;
except
on EcxMaskEditError do
begin
cxMaskEdit1.Properties.EditMask := '';
cxMaskEdit1.Text := '';
cxMaskEdit1.Enabled := False;
cxEditMaskEdit.SetFocus;
raise;
end;
end;
end;
procedure TcxEditMaskEditorDlg.cxCheckBox1PropertiesChange(
Sender: TObject);
var
AMask: string;
begin
AMask := cxTextEdit1.Text;
if Length(cxTextEdit2.Text) > 0 then
FormatStandardMask(AMask, Char(cxTextEdit2.Text[1]));
FormatStandardMask(AMask, cxCheckBox1.Checked);
cxTextEdit1.Text := AMask;
cxMaskEdit2.Properties.EditMask := AMask;
end;
initialization
RegExprSamples := nil;
StandardSamples := nil;
finalization
FreeRegExprSamples;
FreeStandardSamples;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?