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