📄 myedit.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 + -