AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?
Thema durchsuchen
Ansicht
Themen-Optionen

Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

Ein Thema von AlexII · begonnen am 17. Aug 2015 · letzter Beitrag vom 19. Aug 2015
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:30
Das Problem ist, meine Anwendung läuft ohne Tastatur, muss also für die Passworteingabe 9 Buttons erstellen, mit Zahlen und Buchstaben, so wie die alten Handys das haben.
Dann 2 Min. da nicht das Problem besteht, das ein User mit der Maus mitten in die Eingabe klickt...

Delphi-Quellcode:
var
    Ein,PW : ShortString;

procedure TForm86.Edit1Change(Sender: TObject);
begin
  Ein := Edit1.Text;
  Timer1.Enabled := true;
end;

procedure TForm86.Timer1Timer(Sender: TObject);
var
  i : integer;
begin
  Timer1.Enabled := false;

  for i:=1 to length(Ein) do
    if (Ein[i] <> '*') and (Length(Ein) > Length(PW)) then
      PW := PW + Ein[i];

  PW[0] := Ein[0];

  for i:=1 to length(Ein) do
    Ein[i] := '*';

  Edit1.Text := Ein;
  Edit1.SelStart := Length(Ein);
end;
Oder habe ich auf die schnelle etwas übersehen? (geht sicherlich auch schöner)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#22

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:33
@Mavarik Sage mal, du schaltest den Timer vor dem zu verarbeitenden Code aus, ist das gut so? Ich weiß der Code wird abgearbeitet, aber ich hatte immer bedenken bei sowas...
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#23

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:38
@Mavarik Sage mal, du schaltest den Timer vor dem zu verarbeitenden Code aus, ist das gut so? Ich weiß der Code wird abgearbeitet, aber ich hatte immer bedenken bei sowas...
Warum? Woher kommen deinen Bedenken? "Er" springt dann sicherlich nicht aus der Procedure raus...
Ich möchte doch nicht, dass die ganze Zeit der Timer in 250ms feuert...
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:40
Im OnTimer-Event schaltet man doch immer den Timer aus. Oder habe ich etwas verpasst?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#25

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:42
Im OnTimer-Event schaltet man doch immer den Timer aus. Oder habe ich etwas verpasst?

Sherlock
Habe ich auch immer gemacht, war mir aber nicht sicher.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:45
Im OnTimer-Event schaltet man doch immer den Timer aus.
Immer? Wieso Immer?

Wenn ich einen zyklischen Timer brauche schalte ich Ihn doch nicht ab...

Wenn ich den Timer refreshen will dann ein

Delphi-Quellcode:
Timer1.Enabled := false;
Timer1.Enabled := true;
OK... Oder meine Routine dauert länger als das Interval des Timers (Ich hoffe nicht)... dann auch...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#27

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 08:55
Wenn der Benutzer gar nicht in das Feld klicken können soll und in dem Feld selber keine Eingabe vornehmen soll, warum nimmt man dann überhaupt ein TEdit ?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#28

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 09:00
Wenn der Benutzer gar nicht in das Feld klicken können soll und in dem Feld selber keine Eingabe vornehmen soll, warum nimmt man dann überhaupt ein TEdit ?
Weil die Information, dass keine Tastatur genommen werden soll zu spät gepostet wurde...
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#29

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 09:03
Wenn der Benutzer gar nicht in das Feld klicken können soll und in dem Feld selber keine Eingabe vornehmen soll, warum nimmt man dann überhaupt ein TEdit ?
Weil die Information, dass keine Tastatur genommen werden soll zu spät gepostet wurde...
Jahh... pardo, als ich das Thema erstellt habe, hatte ich noch die Windows Tastatur. Aber ein Edit schadet doch nicht, oder? Man stellt es einfach auf ReadOnly.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII (19. Aug 2015 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#30

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?

  Alt 19. Aug 2015, 09:27
Oder einfach so
Delphi-Quellcode:
unit Forms.MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons;

type
  TMainForm = class( TForm )
    PasswordLabel: TLabel;
    Num0Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num1Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num2Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num3Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num4Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num5Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num6Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num7Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num8Button: TSpeedButton; {OnClick -> NumButtonClick}
    Num9Button: TSpeedButton; {OnClick -> NumButtonClick}
    ClearButton: TSpeedButton; {OnClick -> ClearButtonClick}
    BackspaceButton: TSpeedButton; {OnClick -> BackspaceButtonCLick}
    Timer1: TTimer;
    procedure Timer1Timer( Sender: TObject );
    procedure FormShow( Sender: TObject );
    procedure NumButtonClick( Sender: TObject );
    procedure BackspaceButtonClick( Sender: TObject );
    procedure ClearButtonClick( Sender: TObject );
  private
    FPassword: string;
    procedure AddKey( const AChar: Char );
    procedure ClearPassword;
    procedure PresentPassword;
  public
    property Password: string read FPassword;
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  System.StrUtils;

{ TMainForm }

procedure TMainForm.AddKey( const AChar: Char );
begin
  case AChar of
    #8:
      begin
        if Length( FPassword ) > 0
        then
          begin
            SetLength( FPassword, Length( FPassword ) - 1 );
            PasswordLabel.Caption := DupeString( '*', Length( FPassword ) );
          end;
      end;
    '0' .. '9':
      begin
        Timer1.Enabled := False;
        PasswordLabel.Caption := DupeString( '*', Length( FPassword ) ) + AChar;
        FPassword := FPassword + AChar;
        Timer1.Enabled := True;
      end;
  end;
end;

procedure TMainForm.BackspaceButtonClick( Sender: TObject );
begin
  AddKey( #8 );
end;

procedure TMainForm.ClearButtonClick( Sender: TObject );
begin
  ClearPassword;
end;

procedure TMainForm.ClearPassword;
begin
  FPassword := '';
  PasswordLabel.Caption := '';
end;

procedure TMainForm.FormShow( Sender: TObject );
begin
  PresentPassword;
end;

procedure TMainForm.NumButtonClick( Sender: TObject );
var
  Button: TComponent absolute Sender;
begin
  AddKey( Button.Name[ 4 ] ); // Ich bin halt faul ;o)
end;

procedure TMainForm.PresentPassword;
begin
  PasswordLabel.Caption := DupeString( '*', Length( FPassword ) );
end;

procedure TMainForm.Timer1Timer( Sender: TObject );
begin
  TTimer( Sender ).Enabled := False;
  PresentPassword;
end;

end.
Und falls nun doch die Tastatur zugelassen werden soll, dann erreicht man das ganz simpel mit
Delphi-Quellcode:
procedure TMainForm.FormKeyPress( Sender: TObject; var Key: Char );
begin
  AddKey( Key );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Aug 2015 um 12:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz