Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inputbox mit Passwordchar (https://www.delphipraxis.net/108531-inputbox-mit-passwordchar.html)

Damaster 15. Feb 2008 14:18


Inputbox mit Passwordchar
 
Hallo Leute!

Ich suche eine Komponente wie das Inputquery, in der ich den Text als "*" darstellen kann.
Oder gibt es vll eine Möglichkeit das bei einem Inputquery einzustellen, da es ja nicht im OI aufgeführt wird.

MfG
Damaster

Xong 15. Feb 2008 14:22

Re: Inputbox mit Passwordchar
 
Ich weiß zwar nicht, was du mit Inputquery meinst, aber du kannst doch im OnKeyDown-Event das Sternchen setzen und dir die eigentliche Eingabe merken.

Oder du benutzt ein gleich eine Komponente, die deine Anforderungen erfüllt.

dominikkv 15. Feb 2008 14:25

Re: Inputbox mit Passwordchar
 
TEdit kann das auch... Musst nur PasswortChar (oder wie das heißt^^) auf * setzem

Damaster 15. Feb 2008 14:34

Re: Inputbox mit Passwordchar
 
Das ist soweit ja auch klar.
Ein Inputquery ist ein Popup-Dialog, in dem der Benutzer eine Eingabe tätigen kann. Also ein Dialog, der aus einem "Editfeld" und 2 Buttons besteht. Das Problem ist das man ihn wie eine Funktion aufruft.
Also kann ich da nirgends Passwordchar einstellen.
Trotzdem Danke für die schnellen Antworten.

Xong 15. Feb 2008 14:46

Re: Inputbox mit Passwordchar
 
Dann seh ich im Moment keine andere Möglichkeit als dieses Inputquery selbst nachzubilden und nicht auf die vorgefertigte Funktion zuzugreifen.

Damaster 15. Feb 2008 14:54

Re: Inputbox mit Passwordchar
 
ok, das werde ich dann wohl heute Abend mal tun.

Trotzdem Danke!

dominikkv 15. Feb 2008 14:57

Re: Inputbox mit Passwordchar
 
mir fällt da noch der TAdvQueryDialog von TMS ein...

edit: und wenn dus selber machen willst: klick

Union 15. Feb 2008 15:29

Re: Inputbox mit Passwordchar
 
Und wenn Du InputQuery unbedingt ohne Änderung nutzen willst, kannst Du die eingesparte Zeit wieder vergeuden indem Du z.B. einen Thread erstellst, der Dir das Edit für die Passworteingabe patcht ;)
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  TSetPasswordCharThread = class(TThread)
  private
    FWindowTitle : string;
    FSecondsToWait : extended;
    FPasswordChar : char;
  public
     constructor Create(AWindowTitle : string);
     procedure Execute; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses dateutils;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   APassword : string;
begin
   APassword := StringOfChar(#32, 10);
   // Suche nach dem Fenster über den Titel und Edits mit Passwordchar patchen
   TSetPasswordCharThread.Create('Authentifizierung');
   InputQuery('Authentifizierung', 'Passwort', APassword);
end;

{ TSetPasswordCharThread }

function EnumChildProc(Wnd: hWnd; PwdChar : Longint): BOOL; stdcall;
var
   szFull: array[0..MAX_PATH] of Char;
begin
   Result := Wnd <> 0;
   if Result then
   begin
      GetClassName(Wnd, szFull, SizeOf(szFull));
      if AnsiUppercase(szFull) = 'TEDIT' then
         SendMessage(Wnd, EM_SETPASSWORDCHAR, PwdChar, 0);
      EnumChildWindows(Wnd, @EnumChildProc, PwdChar);
   end;
end;

constructor TSetPasswordCharThread.Create(AWindowTitle : string);
begin
   inherited Create(True);
   FreeOnTerminate := true;
   FWindowTitle   := AWindowTitle;
   FSecondsToWait := 3;
   FPasswordChar  := '*';
   Resume;
end;

procedure TSetPasswordCharThread.Execute;
var
   StartTime : TDateTime;
   HPwdWindow : HWnd;
begin
   StartTime := now;
   while not Terminated do
   begin
      sleep(50);
      if (SecondsBetween(now, StartTime) > FSecondsToWait) then
         Terminate;

      HPwdWindow := FindWindow(nil, PAnsiChar(FWindowTitle));
      if HPwdWindow > 0 then
      begin
         EnumChildWindows(HPwdWindow, @EnumChildProc, Ord(FPasswordChar));
         Terminate;
      end;
   end;
end;

end.

Kutter111 15. Feb 2008 17:11

Re: Inputbox mit Passwordchar
 
Hallo Damaster,
mir hat das:Im Edit-Feld in einer InpuBox nur *** anzeigen (Passwort) geholfen.

MfG
Kutter111

ChristianZ 12. Aug 2014 08:58

AW: Inputbox mit Passwordchar
 
Eine Lösung für Delphi XE und aufwärts besteht darin, dem InputQuery() Aufruf im zweiten Parameter ein #31 voranzustellen.


Code:
 
  if InputQuery('Caption', #31 + 'Bitte geben Sie das Passwort ein', strIrgendEineVariable ) then
  begin
    // Rückgabe prüfen....
    if strIrgendEineVariable = '' then
       // Was auch immer

  end;
Gruß
Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.
Seite 1 von 2  1 2      

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