amaskped.pas
来自「delphi编程控件」· PAS 代码 · 共 251 行
PAS
251 行
unit amaskped;
(*
COPYRIGHT (c) RSD Software 1997 - 98
All Rights Reserved.
*)
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Mask, StdCtrls, ExtCtrls, amaskpad, aclconst, registry;
type
TFACLMaskEditor = class(TForm)
Panel1: TPanel;
BOk: TButton;
BCancel: TButton;
BHelp: TButton;
Panel2: TPanel;
GBSamples: TGroupBox;
ListBox: TListBox;
BAdd: TButton;
BEdit: TButton;
LInputMask: TLabel;
EInput: TEdit;
LBlanks: TLabel;
EBlanks: TEdit;
CBLiteral: TCheckBox;
GroupBox1: TGroupBox;
LTextInput: TLabel;
MaskEdit: TMaskEdit;
BDelete: TButton;
procedure EInputChange(Sender: TObject);
procedure CBLiteralClick(Sender: TObject);
procedure EBlanksChange(Sender: TObject);
procedure ListBoxDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure ListBoxClick(Sender: TObject);
procedure BDeleteClick(Sender: TObject);
procedure BAddClick(Sender: TObject);
procedure BEditClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
{ Public declarations }
end;
function EditACLMaskEditString(Var AMask : String) : Boolean;
implementation
const
MaskDChar = ' | ';
MaskDirectory = 'ACLMASKS';
{$R *.DFM}
function EditACLMaskEditString(Var AMask : String) : Boolean;
Var
AForm : TFACLMaskEditor;
begin
AForm := TFACLMaskEditor.Create(Nil);
with AForm do begin
EInput.Text := AMask;
CBLiteral.Checked := MaskGetMaskSave(AMask);
EBlanks.Text := MaskGetMaskBlank(AMask);
end;
AForm.ShowModal;
if(AForm.ModalResult = mrOk) then begin
AMask := AForm.EInput.Text;
Result := True;
end else Result := False;
AForm.Free;
end;
procedure DecodeEditMask(St : String; Var Name, Value, Mask : String);
begin
Name := Copy(St, 1, Pos(MaskDChar, St) - 1);
St := Copy(St, Pos(MaskDChar, St) + Length(MaskDChar), 1000);
Value := Copy(St, 1, Pos(MaskDChar, St) - 1);
Mask := Copy(St, Pos(MaskDChar, St) + Length(MaskDChar), 1000);
end;
procedure TFACLMaskEditor.EInputChange(Sender: TObject);
begin
MaskEdit.EditMask := EInput.Text;
end;
procedure TFACLMaskEditor.CBLiteralClick(Sender: TObject);
Var
St, St1 : String;
i : Integer;
begin
if(EInput.Text <> '') then begin
if(EBlanks.Text = '') then
EBlanks.Text := MaskGetMaskBlank(EInput.Text);
if(CBLiteral.Checked) then
St := MaskFieldSeparator + '1'
else St := MaskFieldSeparator + '0';
St := St + MaskFieldSeparator + EBlanks.Text;
if MaskGetMaskSave(EInput.Text) then
St1 := MaskFieldSeparator + '1'
else St1 := MaskFieldSeparator + '0';
St1 := St1 + MaskFieldSeparator + MaskGetMaskBlank(EInput.Text);
i := Pos(St1, EInput.Text);
if(i > 0) then
EInput.Text := Copy(EInput.Text, 1, i - 1) + St
else EInput.Text := EInput.Text + St;
end;
end;
procedure TFACLMaskEditor.EBlanksChange(Sender: TObject);
begin
if(EBlanks.Text = '') then exit;
if(MaskGetMaskBlank(EInput.Text) = '')
And (EInput.Text <> '') then begin
if(EInput.Text[Length(EInput.Text)] = MaskFieldSeparator) then
EInput.Text := EInput.Text + MaskFieldSeparator;
EInput.Text := EInput.Text + EBlanks.Text;
end else CBLiteralClick(Sender);
end;
procedure TFACLMaskEditor.ListBoxDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
Var
St, St1, StName, StValue, StMask : String;
r : TRect;
begin
DecodeEditMask(ListBox.Items[Index], StName, StValue, StMask);
if MaskGetMaskSave(StMask) then begin
St := MaskFieldSeparator + '1';
St1 := StMask;
StMask := Copy(St1, 1, Pos(St, St1) - 1) + MaskFieldSeparator + '0'
+ Copy(St1, Pos(St, St1) + 2, 1000);
end;
StValue := FormatMaskText(StMask, StValue);
with ListBox.Canvas do begin
if(odSelected in State) then begin
Canvas.Brush.Color := clHighlight;
Canvas.Font.Color := clHighlightText;
end else begin
Canvas.Brush.Color := clWindow;
Canvas.Font.Color := clBlack;
end;
FillRect(Rect);
if odFocused in State then begin
DrawFocusRect(Rect);
end;
end;
with Rect do
SetRect(R, Left, Top, Left + (Right - Left) div 2 - 2, Bottom);
DrawText(ListBox.Canvas.Handle, PChar(StName), Length(StName), r, DT_LEFT or DT_SINGLELINE);
R.Left := R.Right + 4;
R.Right := Rect.Right;
DrawText(ListBox.Canvas.Handle, PChar(StValue), Length(StValue), r, DT_LEFT or DT_SINGLELINE);
end;
procedure TFACLMaskEditor.ListBoxClick(Sender: TObject);
Var
St, St1 : String;
begin
if(ListBox.ItemIndex <> -1) and (ListBox.Items.Count > 0) then begin
DecodeEditMask(ListBox.Items[ListBox.ItemIndex], St1, St1, St);
EInput.Text := St;
end;
end;
procedure TFACLMaskEditor.BDeleteClick(Sender: TObject);
Var
OldIndex : Integer;
begin
if(ListBox.ItemIndex <> -1) then begin
OldIndex := ListBox.ItemIndex;
ListBox.Items.Delete(OldIndex);
if(OldIndex >= ListBox.Items.Count) then
OldIndex := ListBox.Items.Count - 1;
if(OldIndex > -1) then
ListBox.ItemIndex := OldIndex;
ListBoxClick(Sender);
end;
end;
procedure TFACLMaskEditor.BAddClick(Sender: TObject);
Var
AName, AValue, AMask : String;
begin
AName := '';
AValue := '';
AMask := '';
if(EditACLMaskEditStringEdit(AName, AValue, AMask)) then begin
ListBox.Items.Add(AName + MaskDChar + AValue + MaskDChar + AMask);
ListBox.ItemIndex := ListBox.Items.Count - 1;
ListBoxClick(Sender);
end;
end;
procedure TFACLMaskEditor.BEditClick(Sender: TObject);
Var
AName, AValue, AMask : String;
OldIndex : Integer;
begin
if(ListBox.ItemIndex = -1) then exit;
DecodeEditMask(ListBox.Items[ListBox.ItemIndex], AName, AValue, AMask);
if(EditACLMaskEditStringEdit(AName, AValue, AMask)) then begin
OldIndex := ListBox.ItemIndex;
ListBox.Items[OldIndex] := AName + MaskDChar + AValue + MaskDChar + AMask;
ListBox.ItemIndex := OldIndex;
ListBoxClick(Sender);
end;
end;
procedure TFACLMaskEditor.FormCreate(Sender: TObject);
Var
inf : TRegIniFile;
i : Integer;
ASts : TStringList;
begin
inf := TRegIniFile.Create(REGISTRYRSDPATHTOACL);
ASts := TStringList.Create;
inf.ReadSectionValues(MaskDirectory, ASts);
inf.Free;
if(ASts.Count > 0) then begin
ListBox.Items.Clear;
for i := 0 to ASts.Count - 1 do
ListBox.Items.Add(Copy(ASts[i], Pos('=', ASts[i]) + 1, 1000));
end;
ASts.Free;
end;
procedure TFACLMaskEditor.FormClose(Sender: TObject;
var Action: TCloseAction);
var
inf : TRegIniFile;
i : Integer;
begin
if(ModalResult = mrOK) then begin
inf := TRegIniFile.Create(REGISTRYRSDPATHTOACL);
inf.EraseSection(MaskDirectory);
for i := 0 to ListBox.Items.Count - 1 do
inf.WriteString(MaskDirectory, IntToStr(i + 1) , ListBox.Items[i]);
inf.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?