Einzelnen Beitrag anzeigen

Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#1

Edit-Feld mit Windows Passwort-Zeichen

  Alt 7. Mär 2008, 10:22
Das TEdit-Control von Delphi besitzt zwar die Eigenschaft "PasswordChar", jedoch ist es nur sehr schwer möglich, die von Windows XP gewohnten schwarzen Punkte nutzen zu können.

Die nachfolgende Unit ist ein modifizierter Erbe des TEdit-Controls, das bei aktivierten Themes die schwarzen Punkte als Passwort-Zeichen verwendet. Sind die Themes deaktiviert, wird das altbekannte * als Passwort-Zeichen verwendet.
Delphi-Quellcode:
unit PasswordEdit;

interface

uses
  Windows, Classes, Controls, StdCtrls;

type
  TPasswordEdit = class(TCustomEdit)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property AutoSelect;
    property AutoSize;
    property BiDiMode;
    property BorderStyle;
    property CharCase;
    property Color;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property HideSelection;
    property ImeMode;
    property ImeName;
    property MaxLength;
    property OEMConvert;
    property ParentBiDiMode;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ReadOnly;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Text;
    property Visible;
    property OnChange;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDock;
    property OnStartDrag;
    property Anchors;
    property Constraints;
  end;

procedure Register;

implementation

uses
  Forms;

procedure Register;
begin
  RegisterComponents('XP', [TPasswordEdit]);
end;

constructor TPasswordEdit.Create(AOwner: TComponent);
const
  FavouredFonts: array[0..2] of String = ('Tahoma', 'Arial', 'MS Sans Serif');
var
  I: Integer;
begin
  inherited;
  I := Low(FavouredFonts);
  while (I <= High(FavouredFonts))
  and (Screen.Fonts.IndexOf(FavouredFonts[I]) < 0) do
    Inc(I);
  if I <= High(FavouredFonts) then
    Font.Name := FavouredFonts[I];
end;

procedure TPasswordEdit.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or ES_PASSWORD;
end;

end.
  Mit Zitat antworten Zitat