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 + -
显示快捷键?