[Back to OOP SWAG index] [Back to Main SWAG index] [Original]

    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.

[Back to OOP SWAG index] [Back to Main SWAG index] [Original]