Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen? (https://www.delphipraxis.net/186249-passworteingabe-wie-mit-sternchen-verstecken-aber-nicht-das-letzte-zeichen.html)

Mavarik 19. Aug 2015 08:30

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

Zitat von AlexII (Beitrag 1312669)
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)

AlexII 19. Aug 2015 08:33

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?
 
@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...

Mavarik 19. Aug 2015 08:38

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

Zitat von AlexII (Beitrag 1312676)
@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... :stupid:
Ich möchte doch nicht, dass die ganze Zeit der Timer in 250ms feuert...

Sherlock 19. Aug 2015 08:40

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?
 
Im OnTimer-Event schaltet man doch immer den Timer aus. Oder habe ich etwas verpasst?

Sherlock

AlexII 19. Aug 2015 08:42

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

Zitat von Sherlock (Beitrag 1312679)
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.

Mavarik 19. Aug 2015 08:45

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

Zitat von Sherlock (Beitrag 1312679)
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...

Sir Rufo 19. Aug 2015 08:55

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?
 
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
Delphi-Quellcode:
TEdit
? :gruebel:

Mavarik 19. Aug 2015 09:00

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

Zitat von Sir Rufo (Beitrag 1312686)
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
Delphi-Quellcode:
TEdit
? :gruebel:

Weil die Information, dass keine Tastatur genommen werden soll zu spät gepostet wurde... :pale:

AlexII 19. Aug 2015 09:03

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

Zitat von Mavarik (Beitrag 1312689)
Zitat:

Zitat von Sir Rufo (Beitrag 1312686)
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
Delphi-Quellcode:
TEdit
? :gruebel:

Weil die Information, dass keine Tastatur genommen werden soll zu spät gepostet wurde... :pale:

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.

Sir Rufo 19. Aug 2015 09:27

AW: Passworteingabe, wie mit Sternchen verstecken, aber nicht das letzte Zeichen?
 
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz