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

{
EDWIN GROOTHUIS

somebody asked For a inputline For passWords. I have such one, but I've
forgotten WHICH discussionlist... so I'll mail it to the above lists, I
know it's one of it, and know it can be interesting For somebody else.

What I have done is overriden the Draw-Procedure For the inputline to draw
only ***'s instead of the right Characters.  The solution I gave yesterday
was not quitte correct: I used the Procedure SetData to put the *'s into the
Data^-field, but that Procedure calls the Draw-Procedure itself so you'll
get an infinite loop and a stack-overflow error. Now I put the *'s direct to
the Data^-field, I don't think it can give problems.
}

Uses
  app, dialogs, views, Objects;

Type
  PPassWord = ^TPassWord;
  TPassWord = Object(TInputLine)
                Procedure Draw; Virtual;
              end;


Procedure TPassWord.Draw;

Var
  s, t : String;
  i    : Byte;
begin
  GetData(s);
  t := s;
  For i := 1 to length(t) do
    t[i] := '*';
  Data^ := t;
  inherited Draw;
  Data^ := s;
end;

Procedure about;
Var
  d : pdialog;
  r : trect;
  b : pview;
begin
  r.assign(1, 1, 60, 15);
  d := new(pdialog,init(r, 'About'));
  With d^ do
  begin
    flags := flags or wfgrow;
    r.assign(1,1,10,3);
    insert(new(PButton, init(r,'~O~K', cmok, bfdefault)));
    r.assign(2,4,8,5);
    insert(new(PPassWord, init(r,10)));
  end;
  desktop^.execview(d);
  dispose(d, done);
end;


Var
  a : TApplication;
begin
  a.init;
  about;
  a.run;
  a.done;
end.

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