unit LoginScherm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Navigator, ApplicationContext, Subscherm, UserAgent; type TFormLogin = class(TFormSubscherm) Label1: TLabel; Label2: TLabel; EditGebruikersnaam: TEdit; Label3: TLabel; EditWachtwoord: TEdit; PanelLogIn: TPanel; procedure PanelLogInClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure EditGebruikersnaamChange(Sender: TObject); procedure PanelLogInMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PanelLogInMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure EditGebruikersnaamKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditWachtwoordKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditWachtwoordKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditGebruikersnaamKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private FUserAgent: TUserAgent; procedure PanelButtonUpdateClickedVisual(Panel: TPanel; Ingedrukt: boolean); procedure PanelButtonUpdateEnableVisual(Sender: TPanel); procedure Login(); public Constructor Create(AOwner: TComponent; Navigator: INavigator; ApplicationContext: TApplicationContext; UserAgent: TUserAgent); end; implementation uses Util; {$R *.dfm} constructor TFormLogin.Create(AOwner: TComponent; Navigator: INavigator; ApplicationContext: TApplicationContext; UserAgent: TUserAgent); begin inherited Create(AOwner, Navigator, ApplicationContext); self.FUserAgent := UserAgent; end; procedure TFormLogin.FormCreate(Sender: TObject); begin EditWachtwoord.PasswordChar := '*'; // Verberg paswoord PanelLogIn.Enabled := false; PanelButtonUpdateEnableVisual(PanelLogIn); end; procedure TFormLogin.PanelLogInClick(Sender: TObject); begin Login(); end; procedure TFormLogin.PanelLogInMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PanelButtonUpdateClickedVisual((Sender as TPanel), true); end; procedure TFormLogin.PanelLogInMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PanelButtonUpdateClickedVisual((Sender as TPanel), false); end; // Enter in Edit Text's zorgt voor login procedure TFormLogin.EditGebruikersnaamKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if ord(Key) = VK_RETURN then begin Key := 0; PanelButtonUpdateClickedVisual(PanelLogIn, true); end; end; procedure TFormLogin.EditGebruikersnaamKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if ord(Key) = VK_RETURN then begin Key := 0; PanelButtonUpdateClickedVisual(PanelLogIn, false); Login(); end; end; procedure TFormLogin.EditWachtwoordKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if ord(Key) = VK_RETURN then begin Key := 0; PanelButtonUpdateClickedVisual(PanelLogIn, true); end; end; procedure TFormLogin.EditWachtwoordKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if ord(Key) = VK_RETURN then begin Key := 0; PanelButtonUpdateClickedVisual(PanelLogIn, false); Login(); end; end; // Indrukken van button simuleren op panel: http://www.festra.com/wwwboard/messages/1006.html procedure TFormLogin.PanelButtonUpdateClickedVisual(Panel: TPanel; Ingedrukt: boolean); begin // Enkel animatie tonen als panel enabled is if Ingedrukt and PanelLogIn.Enabled then Panel.BevelOuter := bvLowered else Panel.BevelOuter := bvRaised; end; procedure TFormLogin.PanelButtonUpdateEnableVisual(Sender: TPanel); begin if Sender.Enabled then begin Sender.ParentBackground := true; // Neem kleur van parent (default) Sender.Font.Color := clWhite; end else begin Sender.ParentBackground := false; // Neem kleur van parent en maak donkerder Sender.Color := TColor(TUtil.LightenColor(Vcl.Graphics.ColorToRGB(PanelLogIn.Parent.Brush.Color), 70)); Sender.Font.Color := clGray; end; end; procedure TFormLogin.EditGebruikersnaamChange(Sender: TObject); begin // We kijken enkel naar gebruikersnaam, want leeg ww zou geldig kunnen zijn PanelLogIn.Enabled := Trim((Sender as TEdit).Text) <> EmptyStr; PanelButtonUpdateEnableVisual(PanelLogIn); end; procedure TFormLogin.Login(); var ErrorMessage: string; begin // Enkel inloggen als er geldige velden zijn if Trim(EditGebruikersnaam.Text) = EmptyStr then exit; FUserAgent.GebruikerAanmelden(EditGebruikersnaam.Text, EditWachtwoord.Text, self.ApplicationContext.UserContext); if ApplicationContext.UserContext.IsOK then begin self.Navigator.NavigeerNaar(NAVHOME); end else begin // Login gefaald ErrorMessage := ApplicationContext.UserContext.ErrorMessage; if ApplicationContext.UserContext.InternalErrorMessage <> '' then begin ErrorMessage := ErrorMessage + sLineBreak + ApplicationContext.UserContext.InternalErrorMessage; end; if MessageDlg(ErrorMessage, TMsgDlgType.mtInformation, [mbRetry, mbCancel], 0, mbCancel) = mrRetry then begin // Retry gedrukt Login(); end; end; end; end.