Unit Passwd; {*************************************************************************** Written by Mark S. Van Leeuwen. This Code is Public Domain. Please Include my Name in any application that uses this code. ***************************************************************************} Interface Uses Objects,Dialogs,Views,Drivers; Type PPasswordLine=^TPasswordLine; TPasswordLine=Object(TInputline) Data1 :String; Constructor Init(Var Bounds :TRect; AMaxLen :Integer); Procedure GetData(Var Rec);Virtual; Procedure SetData(Var Rec);Virtual; Procedure HandleEvent(Var Event :TEvent);Virtual; End; Implementation {**************** Constructor for the Password Inputline Data **************} Constructor TPasswordLine.Init(Var Bounds :TRect; AMaxlen :Integer); Begin Data1:=''; TInputline.Init(Bounds,AMaxLen); End; {******************* Get Data from Procedure *******************************} Procedure TPasswordLine.GetData(Var Rec); Begin String(Rec):=Data1; End; {****************** Set Data to Procedure **********************************} Procedure TPasswordLine.SetData(Var Rec); Begin Data1:=String(Rec); SelectAll(True); End; {******************** Handle Inputline Event *******************************} Procedure TPasswordLine.HandleEvent(Var Event :TEvent); Var C :String[1]; Begin With Event Do If (What = evKeyDown) And (KeyCode = kbEsc) Then Begin What := Command; Command := cmClose; End; Case Event.What Of evKeyDown: Begin If(UpCase(Event.CharCode) In ['A'..'Z','0'..'9']) Then Begin C:=Event.CharCode; Data1:=Concat(Data1,C); Event.CharCode:='*'; End; If(Event.KeyCode = kbBack) OR (Event.KeyCode = kbDel) Then Begin If(Integer(Data1[0]) <> 0)Then Begin Dec(Data1[0]); End; Event.KeyCode:=kbBack; End; End; evBroadcast: Begin End; End; TInputLine.HandleEvent(Event); End; End. { ----------------- DEMO ---------------- } Program TestPwd; {*************************************************************************** Written by Mark S. Van Leeuwen. This Code is Public Domain. This is a Test Program that shows the use of the unit. Please Include my Name in any application that uses this code. ***************************************************************************} Uses Objects,App,Dialogs,Drivers,Passwd,Views,StdDlg,MsgBox,Menus; Const cmPassword = 1001; Type PTestApp=^TTestApp; TTestApp=Object(TApplication) Procedure HandleEvent(Var Event:TEvent);Virtual; Procedure InitStatusLine;Virtual; End; Procedure TTestApp.HandleEvent(Var Event:TEvent); Procedure Password; Var D : PDialog; Control : Word; A : PView; R : TRect; S : String; Begin R.Assign(0,0,30,08); D := New(PDialog, Init(R, 'Enter Password')); With D^ Do Begin Options := Options or ofCentered; R.Assign(02, 05, 12, 07); Insert(New(PButton, Init(R, 'O~K', cmOk, bfDefault))); R.Assign(15, 05, 25, 07); Insert(New(PButton, Init(R, '~C~ancel', cmCancel, bfNormal))); R.Assign(02,03,28,04); Insert(New(PStaticText, Init(R,'Password is not Displayed.'))); R.Assign(02,02,28,03); A:= New(PPasswordLine, Init(R,10)); Insert(A); R.Assign(02,01,28,02); Insert(New(Plabel, Init(R,'Enter Password:',A))); End; Control:=Desktop^.ExecView(D); IF Control <> cmCancel THEN Begin A^.GetData(S); MessageBox(S,nil,mfInformation+mfOkButton); End; Dispose(D, Done); End; Begin TApplication.HandleEvent(Event); case Event.What of evCommand: begin case Event.Command of cmPassword : Password; else Exit; end; ClearEvent(Event); end; end; end; {***************************************************************************} {**************** Application Status Line Procedure ************************} {***************************************************************************} Procedure TTestApp.InitStatusLine; Var R :Trect; Begin GetExtent(R); R.A.Y := R.B.Y - 1; StatusLine := New(PStatusLine, Init(R, NewStatusDef(0, $FFFF, NewStatusKey('~F1~ Help', kbF1, cmHelp, NewStatusKey('~F2~ Password', kbF2, cmPassword, NewStatusKey('~F10~ Menu', kbF10, cmMenu, NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,nil)))), nil))); End; Var TMyApp :TTestApp; Begin TMyapp.Init; TMyapp.Run; TMyapp.Done; End.