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

📄 myedit.pas

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

interface

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

type
  TPassEdit= class(TEdit)
  private
    { Private declarations }
    FFlasePass:TCaption;
    FAllowPassChar:Boolean;
    FAllowPassRead:Boolean;
    function GetPassChar:Char;
    function GetText:TCaption;
    procedure SetPassChar(const Value:Char);
    procedure SetText(Const Value:TCaption);
  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;
  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;
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;
       else inherited;
    end;
 end;
end;
end.

⌨️ 快捷键说明

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