⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myedit.~pas

📁 密码输入或显示框,可以防止密码被其它程序如木马等窃取
💻 ~PAS
字号:
unit MyEdit;

interface

uses
  Windows, Messages, SysUtils, Classes,Forms,Controls,StdCtrls;

type
  TEnterDone = (DoneNone,DoneOK,DoneCancel,DoneTab,DoneNotify);
  TPassEdit= class(TEdit)
  private
    { Private declarations }
    FFlasePass:TCaption;
    FAllowPassChar:Boolean;
    FAllowPassRead:Boolean;
    FEnterDone:TEnterDone;
    FOnEnterNotify:TNotifyEvent;
    function GetPassChar:Char;
    function GetText:TCaption;
    procedure SetPassChar(const Value:Char);
    procedure SetText(Const Value:TCaption);
    procedure SetEnterDone(Const Value:TEnterDone);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;
    procedure DefaultHandler(Var Message); override;
  published
    { Published declarations }
    property AllowPassChar:Boolean read FAllowPassChar write FAllowPassChar;
    property AllowPassRead:Boolean read FAllowPassRead write FAllowPassRead;
    property PassWordChar:Char read GetPassChar write SetPassChar;     
    property FlasePass:TCaption read FFlasePass write FFlasePass; 
    property Text:TCaption read GetText write SetText;  
   property EnterDone:TEnterDone read FEnterDone write SetEnterDone default DoneOK;
   property OnEnterNotify:TNotifyEvent read FOnEnterNotify write FOnEnterNotify;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Custom', [TPassEdit]);
end;        
function TPassEdit.GetPassChar:Char;
begin    
 if HandleAllocated then
    Result:=Char(SendMessage(Handle,EM_GETPASSWORDCHAR,0,0))
 else Result:=inherited PassWordChar;
end;
function TPassEdit.GetText:TCaption;    
var
Old1,Old2:Boolean;
begin
 Old1:=FAllowPassChar;
 Old2:=FAllowPassRead;
 FAllowPassChar:=True;
 FAllowPassRead:=True;
 Result:=inherited Text;
 FAllowPassChar:=Old1;
 FAllowPassRead:=Old2;
end;
procedure TPassEdit.SetPassChar(const Value:Char);
var
Old1,Old2:Boolean;
begin
 Old1:=FAllowPassChar;
 Old2:=FAllowPassRead;
 FAllowPassChar:=True;
 FAllowPassRead:=True;
 if HandleAllocated then
    inherited PassWordChar:=Char(SendMessage(Handle,EM_GETPASSWORDCHAR,0,0));
 inherited PassWordChar:=Value;
 FAllowPassChar:=Old1;
 FAllowPassRead:=Old2;
end;
procedure TPassEdit.SetText(Const Value:TCaption);
begin
  inherited Text:=Value;
end;   
procedure TPassEdit.SetEnterDone(Const Value:TEnterDone);
begin
  FEnterDone:=Value;
end;
constructor TPassEdit.Create(AOwner: TComponent);
begin
 FAllowPassChar:=True;
 FAllowPassRead:=True;
 inherited Create(AOwner);
 FAllowPassChar:=False;
 FAllowPassRead:=False;
 PassWordChar:='*';
end;
destructor TPassEdit.Destroy();
begin
 inherited;
end;
procedure TPassEdit.DefaultHandler(Var Message);
var
P:PChar;
List:TList;
Order:TTabOrder;
begin
 if (csDesigning in ComponentState) or (csCreating in ControlState) then inherited
 else With  TMessage(Message) do begin
 case TMessage(Message).Msg  of
       EM_SETPASSWORDCHAR:
          if FAllowPassChar then inherited;
       WM_GETTEXT:
          if  FAllowPassRead then inherited
          else begin
             P:=PChar(FFlasePass);
             Result:=StrLen(StrLCopy(PChar(LParam),P,WParam-1));
          end;
       WM_GETTEXTLENGTH:
          if  FAllowPassRead then inherited
          else begin        
              P:=PChar(FFlasePass);
              if P=nil then Result:=0
              else Result:=StrLen(P);
          end;
       WM_KEYDOWN://<2----------------------
          if Integer(wParam)=VK_RETURN then begin
          try
            case FEnterDone of
                 DoneOK:begin
                       (Parent as TForm).ModalResult:=mrOK;
                   //  (Parent as TForm).Close;
                       end;
                 DoneCancel:begin
                        (Parent as TForm).ModalResult:=mrCancel;
                   // (Parent as TForm).Close;
                        end;
                 DoneTab:begin
                        List:=TList.Create;
                       try  //<1---------------------
                        (Parent as TForm).GetTabOrderList(List);
                        Order:=TabOrder+1;
                       if Order>=List.Count then Order:=0;
                       while ((Order>-1) and (Order<List.Count)) do  begin
                          if TWinControl(List.Items[Order]).TabStop then begin
                             TWinControl(List.Items[Order]).SetFocus;
                             Break;
                       end else Inc(Order);
                       end;
                       finally
                         List.Free;
                       end;//-------------------------1>
                       end;
                 DoneNotify: if Assigned(FOnEnterNotify) then FOnEnterNotify(Self);
                       else inherited;
                     end;//----------------2>
                   except
                  end;
                  end;
       else inherited;
    end;
 end;
end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -